<?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>194867</bug_id>
          
          <creation_ts>2019-02-20 13:05:47 -0800</creation_ts>
          <short_desc>Use a SQLite database to hold the ResourceLoadStatistics data</short_desc>
          <delta_ts>2019-08-12 10:04:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>
          
          <blocked>195088</blocked>
    
    <blocked>195294</blocked>
    
    <blocked>195419</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>mark.lam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1508200</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-02-20 13:05:47 -0800</bug_when>
    <thetext>The ResourceLoadStatistics database plist is a silly way to store the data. It requires a lot of stuff to be held in memory, and forces lots of looping and string comparisons to find out information.

This problem has already been solved in a much better way in the form of relational databases. We use them elsewhere in WebKit, and should do so for this storage as well.

This patch creates an optional SQLite database to handle ITP operations.

1. It adds a new internal experimental feature flag to activate it. It requires the user exit and restart the process to take effect.
2. It populates itself from the existing plist file (if it exists).
3. It stops using the plist in favor of the database.
4. It does queries and other operations using the database instead of the old hash table implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508226</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-02-20 13:54:06 -0800</bug_when>
    <thetext>&lt;rdar://problem/24240854&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508561</commentid>
    <comment_count>2</comment_count>
      <attachid>362617</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-02-21 10:12:26 -0800</bug_when>
    <thetext>Created attachment 362617
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510244</commentid>
    <comment_count>3</comment_count>
      <attachid>363032</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-02-26 16:03:25 -0800</bug_when>
    <thetext>Created attachment 363032
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510358</commentid>
    <comment_count>4</comment_count>
      <attachid>363065</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-02-26 21:28:29 -0800</bug_when>
    <thetext>Created attachment 363065
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511087</commentid>
    <comment_count>5</comment_count>
      <attachid>363255</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-02-28 13:08:06 -0800</bug_when>
    <thetext>Created attachment 363255
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511464</commentid>
    <comment_count>6</comment_count>
      <attachid>363255</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-03-01 10:53:07 -0800</bug_when>
    <thetext>Comment on attachment 363255
Patch

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

I didn&apos;t do a full review. This is a lot of code!

&gt; Source/WebCore/page/RuntimeEnabledFeatures.h:540
&gt; +    bool m_itpDatabaseMode { false };

This should be called m_itpDatabaseModeEnabled

&gt; Source/WebCore/platform/sql/SQLiteDatabase.h:67
&gt; +    WEBCORE_EXPORT int runVacuumCommand();

Comment should say what the return value means.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:94
&gt; +    , m_observedDomainCount(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT COUNT(*) FROM ObservedDomains&quot;_s))
&gt; +    , m_insertObservedDomainStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO ObservedDomains (registrableDomain, lastSeen, hadUserInteraction, mostRecentUserInteractionTime, grandfathered, isPrevalent, isVeryPrevalent, dataRecordsRemoved, timesAccessedAsFirstPartyDueToUserInteraction, timesAccessedAsFirstPartyDueToStorageAccessAPI) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)&quot;_s))
&gt; +    , m_insertTopLevelDomainStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO TopLevelDomains VALUES (?)&quot;_s))
&gt; +    , m_domainIDFromStringStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_storageAccessUnderTopFrameDomainsStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO StorageAccessUnderTopFrameDomains (domainID, topLevelDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain == ?&quot;_s))
&gt; +    , m_topFrameUniqueRedirectsTo(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO TopFrameUniqueRedirectsTo (sourceDomainID, toDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain == ?&quot;_s))
&gt; +    , m_topFrameUniqueRedirectsToExists(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT EXISTS (SELECT 1 FROM TopFrameUniqueRedirectsTo WHERE sourceDomainID = ? AND toDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))&quot;_s))
&gt; +    , m_topFrameUniqueRedirectsFrom(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO TopFrameUniqueRedirectsFrom (targetDomainID, fromDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_topFrameUniqueRedirectsFromExists(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT EXISTS (SELECT 1 FROM TopFrameUniqueRedirectsFrom WHERE targetDomainID = ? AND fromDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))&quot;_s))
&gt; +    , m_subframeUnderTopFrameDomains(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO SubframeUnderTopFrameDomains (subFrameDomainID, topFrameDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_subframeUnderTopFrameDomainExists(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT EXISTS (SELECT 1 FROM SubframeUnderTopFrameDomains WHERE subFrameDomainID = ? AND topFrameDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))&quot;_s))
&gt; +    , m_subresourceUnderTopFrameDomains(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO SubresourceUnderTopFrameDomains (subresourceDomainID, topFrameDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_subresourceUnderTopFrameDomainExists(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT EXISTS (SELECT 1 FROM SubresourceUnderTopFrameDomains WHERE subresourceDomainID = ? AND topFrameDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))&quot;_s))
&gt; +    , m_subresourceUniqueRedirectsTo(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO SubresourceUniqueRedirectsTo (subresourceDomainID, toDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain == ?&quot;_s))
&gt; +    , m_subresourceUniqueRedirectsToExists(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT EXISTS (SELECT 1 FROM SubresourceUniqueRedirectsTo WHERE subresourceDomainID = ? AND toDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))&quot;_s))
&gt; +    , m_subresourceUniqueRedirectsFrom(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;INSERT INTO SubresourceUniqueRedirectsFrom (subresourceDomainID, fromDomainID) SELECT ?, domainID FROM ObservedDomains WHERE registrableDomain == ?&quot;_s))
&gt; +    , m_subresourceUniqueRedirectsFromExists(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT EXISTS (SELECT 1 FROM SubresourceUniqueRedirectsFrom WHERE subresourceDomainID = ? AND fromDomainID = (SELECT domainID FROM ObservedDomains WHERE registrableDomain = ?))&quot;_s))
&gt; +    , m_mostRecentUserInteractionStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET hadUserInteraction = ?, mostRecentUserInteractionTime = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateLastSeenStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET lastSeen = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updatePrevalentResourceStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET isPrevalent = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_isPrevalentResourceStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT isPrevalent FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateVeryPrevalentResourceStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET isVeryPrevalent = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_isVeryPrevalentResourceStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT isVeryPrevalent FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_clearPrevalentResourceStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET isPrevalent = 0, isVeryPrevalent = 0 WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateHadUserInteractionStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET hadUserInteraction = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_hadUserInteractionStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT hadUserInteraction, mostRecentUserInteractionTime FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateMostRecentUserInteractionTimeStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET mostRecentUserInteractionTime = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateGrandfatheredStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET grandfathered = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_isGrandfatheredStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT grandfathered FROM ObservedDomains WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateDataRecordsRemovedStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET dataRecordsRemoved = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateTimesAccessedAsFirstPartyDueToUserInteractionStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET timesAccessedAsFirstPartyDueToUserInteraction = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_updateTimesAccessedAsFirstPartyDueToStorageAccessAPIStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;UPDATE ObservedDomains SET timesAccessedAsFirstPartyDueToStorageAccessAPI = ? WHERE registrableDomain = ?&quot;_s))
&gt; +    , m_findExpiredUserInteractionStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT domainID FROM ObservedDomains WHERE hadUserInteraction = 1 AND mostRecentUserInteractionTime &lt; ?&quot;_s))

Would be nice if all these strings were in a const char* const [] to make them more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511474</commentid>
    <comment_count>7</comment_count>
      <attachid>363255</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-01 11:13:13 -0800</bug_when>
    <thetext>Comment on attachment 363255
Patch

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

This is huge. I did not have time to go further.

&gt; Source/WebCore/page/RuntimeEnabledFeatures.h:151
&gt; +    void setItpDatabaseModeEnabled(bool isEnabled) { m_itpDatabaseMode = isEnabled; }

Don&apos;t we use all caps for abbreviations? setITP...

&gt;&gt; Source/WebCore/page/RuntimeEnabledFeatures.h:540
&gt;&gt; +    bool m_itpDatabaseMode { false };
&gt; 
&gt; This should be called m_itpDatabaseModeEnabled

Actually, Boolean variables need a prefix as per WebKit coding style so:
m_isITPDatabaseModeEnabled ?

Am I not even sure what this means though? Do we really want &quot;Mode&quot; in there?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:55
&gt; +#define RELEASE_LOG_IF_ALLOWED(sessionID, fmt, ...) RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), Network, &quot;%p - NetworkHTTPSUpgradeChecker::&quot; fmt, this, ##__VA_ARGS__)

NetworkHTTPSUpgradeChecker, haha funny. copy/pasta.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:56
&gt; +#define RELEASE_LOG_ERROR_IF_ALLOWED(sessionID, fmt, ...) RELEASE_LOG_ERROR_IF(sessionID.isAlwaysOnLoggingAllowed(), Network, &quot;%p - NetworkHTTPSUpgradeChecker::&quot; fmt, this, ##__VA_ARGS__)

NetworkHTTPSUpgradeChecker, haha funny.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:60
&gt; +    , m_storageDirectoryPath(storageDirectoryPath + String(&quot;/observations.db&quot;))

Why String() ?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:382
&gt; +    for (const auto&amp; topFrameDomain : loadStatistics.storageAccessUnderTopFrameDomains)

We usually omit the &quot;const&quot; when using auto. Same comment below.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:397
&gt; +    for (const auto&amp; topFrameDomain : loadStatistics.subresourceUniqueRedirectsTo)

Should this still be named topFrameDomain?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:400
&gt; +    for (const auto&amp; topFrameDomain : loadStatistics.subresourceUniqueRedirectsFrom)

ditto.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:413
&gt; +        const auto&amp; statisticsMap = weakMemoryStore-&gt;data();

we normally omit const when using auto.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:414
&gt; +        for (const auto&amp; statistic : statisticsMap)

ditto.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:419
&gt; +        for (const auto&amp; statistic : statisticsMap)

ditto.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:439
&gt; +        builder.appendLiteral(&quot;\&quot;&quot;);

builder.append(&apos;&quot;&apos;);

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:441
&gt; +        builder.appendLiteral(&quot;\&quot;&quot;);

ditto.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:464
&gt; +        RELEASE_LOG(ResourceLoadStatistics, &quot;Hit %u recursive calls in redirect backtrace. Returning early.&quot;, maxNumberOfRecursiveCallsInRedirectTraceBack);

Should this be a RELEASE_LOG_ERROR?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:468
&gt; +    numberOfRecursiveCalls++;

++numberOfRecursiveCalls;

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:699
&gt; +#if !RELEASE_LOG_DISABLED

Why do we need all these #if !RELEASE_LOG_DISABLED?
Cannot be make RELEASE_LOG_INFO_IF() a no-op in this case instead?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1031
&gt; +    ASSERT(0);

ASSERT_NOT_REACHED() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511513</commentid>
    <comment_count>8</comment_count>
      <attachid>363255</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-01 12:04:25 -0800</bug_when>
    <thetext>Comment on attachment 363255
Patch

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

Ok, I did a full pass now.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:49
&gt; +class ResourceLoadStatisticsDatabaseStore : public ResourceLoadStatisticsStore {

final ?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:168
&gt; +    UniqueRef&lt;WebCore::SQLiteStatement&gt; m_observedDomainCount;

Could we mark some of these as mutable to avoid some of the const casting?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:48
&gt; +class ResourceLoadStatisticsMemoryStore : public ResourceLoadStatisticsStore {

final ?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:93
&gt; +    ResourceLoadStatisticsStore(WebResourceLoadStatisticsStore&amp;, WorkQueue&amp;);

This constructor should probably be protected.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:221
&gt; +protected:

It is considered bad practice to have protected data members in a base class. Data members should ideally be private. You can have protected getters / setters for them as needed.

&gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:195
&gt; +    std::unique_ptr&lt;ResourceLoadStatisticsDatabaseStore&gt; m_databaseStore;

It seems you cannot have both a m_memoryStore and a m_databaseStore. Also, they both inherit the same base class. Seems to me there should be a single data member whose type is the base class. It would avoid all those if (m_databaseStore) checks in the cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511520</commentid>
    <comment_count>9</comment_count>
      <attachid>363255</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-01 12:18:29 -0800</bug_when>
    <thetext>Comment on attachment 363255
Patch

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

How are we going to handle versioning and future schema upgrades?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:178
&gt; +    mutable UniqueRef&lt;WebCore::SQLiteStatement&gt; m_subframeUnderTopFrameDomainExists;

Why are these all UniqueRef&apos;s?  No inheritance is involved, and this uses the same amount of memory, it just makes them separate allocations and adds a pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511543</commentid>
    <comment_count>10</comment_count>
      <attachid>363255</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-01 12:45:38 -0800</bug_when>
    <thetext>Comment on attachment 363255
Patch

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

&gt;&gt;&gt; Source/WebCore/page/RuntimeEnabledFeatures.h:540
&gt;&gt;&gt; +    bool m_itpDatabaseMode { false };
&gt;&gt; 
&gt;&gt; This should be called m_itpDatabaseModeEnabled
&gt; 
&gt; Actually, Boolean variables need a prefix as per WebKit coding style so:
&gt; m_isITPDatabaseModeEnabled ?
&gt; 
&gt; Am I not even sure what this means though? Do we really want &quot;Mode&quot; in there?

Sure -- it could be m_isITPDatabaseEnabled.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:55
&gt;&gt; +#define RELEASE_LOG_IF_ALLOWED(sessionID, fmt, ...) RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), Network, &quot;%p - NetworkHTTPSUpgradeChecker::&quot; fmt, this, ##__VA_ARGS__)
&gt; 
&gt; NetworkHTTPSUpgradeChecker, haha funny. copy/pasta.

Now you know what I used as my inspiration ...

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:94
&gt;&gt; +    , m_findExpiredUserInteractionStatement(makeUniqueRef&lt;WebCore::SQLiteStatement&gt;(m_database.get(), &quot;SELECT domainID FROM ObservedDomains WHERE hadUserInteraction = 1 AND mostRecentUserInteractionTime &lt; ?&quot;_s))
&gt; 
&gt; Would be nice if all these strings were in a const char* const [] to make them more readable.

Will do!

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:382
&gt;&gt; +    for (const auto&amp; topFrameDomain : loadStatistics.storageAccessUnderTopFrameDomains)
&gt; 
&gt; We usually omit the &quot;const&quot; when using auto. Same comment below.

Will fix.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:397
&gt;&gt; +    for (const auto&amp; topFrameDomain : loadStatistics.subresourceUniqueRedirectsTo)
&gt; 
&gt; Should this still be named topFrameDomain?

No. Copy/paste foo on my part. I&apos;ll fix.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:464
&gt;&gt; +        RELEASE_LOG(ResourceLoadStatistics, &quot;Hit %u recursive calls in redirect backtrace. Returning early.&quot;, maxNumberOfRecursiveCallsInRedirectTraceBack);
&gt; 
&gt; Should this be a RELEASE_LOG_ERROR?

Yes, good catch.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:699
&gt;&gt; +#if !RELEASE_LOG_DISABLED
&gt; 
&gt; Why do we need all these #if !RELEASE_LOG_DISABLED?
&gt; Cannot be make RELEASE_LOG_INFO_IF() a no-op in this case instead?

Good point.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1031
&gt;&gt; +    ASSERT(0);
&gt; 
&gt; ASSERT_NOT_REACHED() ?

Yes.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:49
&gt;&gt; +class ResourceLoadStatisticsDatabaseStore : public ResourceLoadStatisticsStore {
&gt; 
&gt; final ?

Sure!

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:168
&gt;&gt; +    UniqueRef&lt;WebCore::SQLiteStatement&gt; m_observedDomainCount;
&gt; 
&gt; Could we mark some of these as mutable to avoid some of the const casting?

Yes. That&apos;s a better idea.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:178
&gt;&gt; +    mutable UniqueRef&lt;WebCore::SQLiteStatement&gt; m_subframeUnderTopFrameDomainExists;
&gt; 
&gt; Why are these all UniqueRef&apos;s?  No inheritance is involved, and this uses the same amount of memory, it just makes them separate allocations and adds a pointer.

Do you mean why not just make them members (i.e., WebCore::SQLiteStatement m_subframeUnder...Blah)?

Sure - I can do so. I was mimicking other SQLite code I found in WebKit and though this was needed for some reason.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:48
&gt;&gt; +class ResourceLoadStatisticsMemoryStore : public ResourceLoadStatisticsStore {
&gt; 
&gt; final ?

Yes

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:93
&gt;&gt; +    ResourceLoadStatisticsStore(WebResourceLoadStatisticsStore&amp;, WorkQueue&amp;);
&gt; 
&gt; This constructor should probably be protected.

Good idea.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:221
&gt;&gt; +protected:
&gt; 
&gt; It is considered bad practice to have protected data members in a base class. Data members should ideally be private. You can have protected getters / setters for them as needed.

Okay -- I&apos;ll do so.

&gt;&gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:195
&gt;&gt; +    std::unique_ptr&lt;ResourceLoadStatisticsDatabaseStore&gt; m_databaseStore;
&gt; 
&gt; It seems you cannot have both a m_memoryStore and a m_databaseStore. Also, they both inherit the same base class. Seems to me there should be a single data member whose type is the base class. It would avoid all those if (m_databaseStore) checks in the cpp.

Oh! What an idiot I am! Of course -- I&apos;ll change that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512013</commentid>
    <comment_count>11</comment_count>
      <attachid>363476</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-03 19:01:23 -0800</bug_when>
    <thetext>Created attachment 363476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512169</commentid>
    <comment_count>12</comment_count>
      <attachid>363513</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-04 08:24:07 -0800</bug_when>
    <thetext>Created attachment 363513
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512172</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-04 08:26:09 -0800</bug_when>
    <thetext>Attachment 363513 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:291:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512241</commentid>
    <comment_count>14</comment_count>
      <attachid>363513</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-03-04 10:57:50 -0800</bug_when>
    <thetext>Comment on attachment 363513
Patch

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

r=me with changes.

&gt; Source/WebCore/page/RuntimeEnabledFeatures.h:152
&gt; +    bool iTPDatabaseEnabled() const { return m_isITPDatabaseEnabled; }

typo: iTPDatabaseEnabled -&gt; isTPDatabaseEnabled

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:145
&gt; +    this-&gt;workQueue()-&gt;dispatch([this, path = m_storageDirectoryPath.isolatedCopy()] {

this-&gt;workQueue()-&gt;dispatch() could be workQueue.dispatch(). But really, why are we dispatching here? We are already on the background queue.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:155
&gt; +        if (!m_database.tableExists(&quot;ObservedDomains&quot;)) {

&quot;ObservedDomains&quot;_s

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:182
&gt; +        result = m_observedDomainCount.getColumnInt(0) ? false : true;

Personally, I think all these ternaries would look better like so:
result = !m_observedDomainCount.getColumnInt(0);

But your call.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:190
&gt; +constexpr auto createObservedDomain = &quot;CREATE TABLE ObservedDomains (&quot;

Could we move those to the top of the file with the others?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:329
&gt; +{

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:363
&gt; +    if (statement.bindInt(1, firstDomainID) != SQLITE_OK

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:371
&gt; +    bool result = statement.getColumnInt(0) ? true : false;

I think it would look better like so: bool relationShipExists = !!statement.getColumnInt(0);

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:381
&gt; +    if (statement.bindInt(1, domainID) != SQLITE_OK

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:419
&gt; +    unsigned domainID = 0;

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:438
&gt; +    auto registrableDomainID = domainID(loadStatistics.registrableDomain);

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:463
&gt; +    workQueue()-&gt;dispatch([this, weakMemoryStore = makeWeakPtr(memoryStore)] {

Why are we dispatching? I believe this is already called on the background queue since all methods of the stores are supposed to be always called on the background queue. On a related note, we should assert we are on the right queue.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:506
&gt; +    SQLiteStatement domainsToUpdateStatement(m_database, makeString(&quot;UPDATE ObservedDomains SET dataRecordsRemoved = dataRecordsRemoved + 1 WHERE registrableDomain IN (&quot;, domainsToString(domains), &quot;)&quot;));

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:539
&gt; +            auto newDomain = findTopFrames.getColumnInt(0);

isNewDomain? or more likely newDomainID?

The name is confusing considering this is an int.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:594
&gt; +    HashMap&lt;unsigned, NotVeryPrevalentResources&gt; results;

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:674
&gt; +    ensurePrevalentResourcesForDebugMode();

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:680
&gt; +{

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:685
&gt; +{

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:822
&gt; +{

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:833
&gt; +    if (!debugModeEnabled())

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:942
&gt; +    if (m_mostRecentUserInteractionStatement.bindInt(1, hadUserInteraction)

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1041
&gt; +    SQLiteStatement domainsToUpdateStatement(m_database, makeString(&quot;UPDATE ObservedDomains SET isPrevalent = 1 WHERE domainID IN (&quot;, buildList(WTF::IteratorRange&lt;StdSet&lt;unsigned&gt;::iterator&gt;(domains.begin(), domains.end())), &quot;)&quot;));

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1055
&gt; +    ASSERT_NOT_REACHED(0);

ASSERT_NOT_REACHED(0); -&gt; ASSERT_NOT_REACHED();

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1268
&gt; +    SQLiteStatement statement(m_database, makeString(&quot;SELECT isPrevalent, hadUserInteraction FROM ObservedDomains WHERE registrableDomain = &quot;, domain.string()));

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:1284
&gt; +    auto firstPartyPrimaryDomainID = domainID(firstPartyDomain);

ASSERT(!RunLoop::isMain());

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:79
&gt; +    this-&gt;workQueue()-&gt;dispatchAfter(5_s, [weakThis = makeWeakPtr(*this)] {

workQueue.dispatchAfter() ?

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:219
&gt; +    Vector&lt;OperatingDate&gt;&amp; operatingDates() { return m_operatingDates; }

Please add a proper setter instead.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:221
&gt; +    WallTime&amp; endOfGrandfatheringTimestamp() { return m_endOfGrandfatheringTimestamp; }

Please add a proper setter instead: setEndOfGrandfatheringTimestamp(WallTime);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512284</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-03-04 12:10:14 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; How are we going to handle versioning and future schema upgrades?
This was not answered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512362</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-04 14:23:25 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #9)
&gt; Comment on attachment 363255 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=363255&amp;action=review
&gt; 
&gt; How are we going to handle versioning and future schema upgrades?

I&apos;ll add a new radar to track that. I&apos;ll probably need to have a revision stored somewhere. I was thinking about adding a table to hold &quot;operating dates&quot; as well, so I can do a separate patch for that once this one is landed. It&apos;s already enormous.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512367</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-04 14:42:56 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #16)
&gt; (In reply to Alex Christensen from comment #9)
&gt; &gt; Comment on attachment 363255 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=363255&amp;action=review
&gt; &gt; 
&gt; &gt; How are we going to handle versioning and future schema upgrades?
&gt; 
&gt; I&apos;ll add a new radar to track that. I&apos;ll probably need to have a revision
&gt; stored somewhere. I was thinking about adding a table to hold &quot;operating
&gt; dates&quot; as well, so I can do a separate patch for that once this one is
&gt; landed. It&apos;s already enormous.

Bug 195294</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512369</commentid>
    <comment_count>18</comment_count>
      <attachid>363552</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-04 14:51:42 -0800</bug_when>
    <thetext>Created attachment 363552
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512404</commentid>
    <comment_count>19</comment_count>
      <attachid>363566</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-04 16:13:24 -0800</bug_when>
    <thetext>Created attachment 363566
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512414</commentid>
    <comment_count>20</comment_count>
      <attachid>363566</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-04 16:45:56 -0800</bug_when>
    <thetext>Comment on attachment 363566
Patch for landing

Rejecting attachment 363566 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;build&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--build-style=release&apos;, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
MATTING_CONTEXT -DENABLE_LEGACY_CSS_VENDOR_PREFIXES -DENABLE_LEGACY_CUSTOM_PROTOCOL_MANAGER -DENABLE_LEGACY_ENCRYPTED_MEDIA -DENABLE_MATHML -DENABLE_MEDIA_CONTROLS_SCRIPT -DENABLE_MEDIA_SOURCE -DENABLE_MEDIA_STREAM -DENABLE_METER_ELEMENT -DENABLE_MOUSE_CURSOR_SCALE -DENABLE_NOTIFICATIONS -DENABLE_PAYMENT_REQUEST -DENABLE_PDFKIT_PLUGIN -DENABLE_POINTER_EVENTS -DENABLE_POINTER_LOCK -DENABLE_PUBLIC_SUFFIX_LIST -DENABLE_REMOTE_INSPECTOR -DENABLE_RESOURCE_LOAD_STATISTICS -DENABLE_RESOURCE_USAGE -DENABLE_RUBBER_BANDING -DENABLE_SERVICE_CONTROLS -DENABLE_SERVICE_WORKER -DENABLE_SPEECH_SYNTHESIS -DENABLE_STREAMS_API -DENABLE_WEB_CRYPTO -DENABLE_SVG_FONTS -DENABLE_TELEPHONE_NUMBER_DETECTION -DENABLE_TEXT_AUTOSIZING -DENABLE_USER_MESSAGE_HANDLERS -DENABLE_USERSELECT_ALL -DENABLE_VARIATION_FONTS -DENABLE_VIDEO -DENABLE_VIDEO_PRESENTATION_MODE -DENABLE_VIDEO_TRACK -DENABLE_VIDEO_USES_ELEMENT_FULLSCREEN -DENABLE_WEB_AUDIO -DENABLE_WEB_AUTHN -DENABLE_WEB_RTC -DENABLE_WEBGL -DENABLE_WEBGL2 -DENABLE_WEBGPU -DENABLE_WEBMETAL -DENABLE_WIRELESS_PLAYBACK_TARGET -DENABLE_XSLT -DENABLE_MANUAL_SANDBOXING -DHAVE_CORE_PREDICTION -DU_HIDE_DEPRECATED_API -DU_DISABLE_RENAMING=1 -DU_SHOW_CPLUSPLUS_API=0 -DFRAMEWORK_NAME=WebKit -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -fasm-blocks -fstrict-aliasing -Wdeprecated-declarations -Winvalid-offsetof -mmacosx-version-min=10.13 -g -fvisibility=hidden -fvisibility-inlines-hidden -fno-threadsafe-statics -Wno-sign-conversion -Winfinite-recursion -Wmove -Wcomma -Wblock-capture-autoreleasing -Wstrict-prototypes -Wrange-loop-analysis -Wno-semicolon-before-method-body -iquote /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/WebKit-generated-files.hmap -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/WebKit-own-target-headers.hmap -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/WebKit-all-target-headers.hmap -iquote /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/WebKit-project-headers.hmap -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/include -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/usr/local/include -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/WebCore.framework/PrivateHeaders/ForwardingHeaders -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/DerivedSources/WebKit2 -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/usr/local/include/WebKitAdditions -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/local/include/WebKitAdditions -I/Volumes/Data/EWS/WebKit/WebKitBuild/Release/usr/local/include/webrtc -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/local/include/webrtc -I/Volumes/Data/EWS/WebKit/Source/WebKit -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/DerivedSources/x86_64 -I/Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/DerivedSources -Wall -Wextra -Wcast-qual -Wchar-subscripts -Wextra-tokens -Wformat-security -Winit-self -Wmissing-format-attribute -Wmissing-noreturn -Wno-unused-parameter -Wpacked -Wpointer-arith -Wredundant-decls -Wundef -Wwrite-strings -Wexit-time-destructors -Wglobal-constructors -Wtautological-compare -Wimplicit-fallthrough -F/Volumes/Data/EWS/WebKit/WebKitBuild/Release -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/PrivateFrameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks -iframework /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/PrivateFrameworks -isystem /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/System.framework/PrivateHeaders -include /Volumes/Data/EWS/WebKit/WebKitBuild/PrecompiledHeaders/WebKit2Prefix-bzwgnnttmtoavwhghxyzrzozdnuw/WebKit2Prefix.h -MMD -MT dependencies -MF /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/Objects-normal/x86_64/WebSocketStreamMessageReceiver.d --serialize-diagnostics /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/Objects-normal/x86_64/WebSocketStreamMessageReceiver.dia -c /Volumes/Data/EWS/WebKit/WebKitBuild/Release/DerivedSources/WebKit2/WebSocketStreamMessageReceiver.cpp -o /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/Objects-normal/x86_64/WebSocketStreamMessageReceiver.o

** BUILD FAILED **


The following build commands failed:
	CompileC /Volumes/Data/EWS/WebKit/WebKitBuild/WebKit.build/Release/WebKit.build/Objects-normal/x86_64/WebPageUpdatePreferences.o /Volumes/Data/EWS/WebKit/WebKitBuild/Release/DerivedSources/WebKit2/WebPageUpdatePreferences.cpp normal x86_64 c++ com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)

Full output: https://webkit-queues.webkit.org/results/11369087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512439</commentid>
    <comment_count>21</comment_count>
      <attachid>363577</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-04 18:15:30 -0800</bug_when>
    <thetext>Created attachment 363577
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512440</commentid>
    <comment_count>22</comment_count>
      <attachid>363578</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-03-04 18:23:15 -0800</bug_when>
    <thetext>Created attachment 363578
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512452</commentid>
    <comment_count>23</comment_count>
      <attachid>363578</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-04 19:00:36 -0800</bug_when>
    <thetext>Comment on attachment 363578
Patch for landing

Clearing flags on attachment: 363578

Committed r242406: &lt;https://trac.webkit.org/changeset/242406&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512453</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-04 19:00:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1512483</commentid>
    <comment_count>25</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-03-04 20:26:03 -0800</bug_when>
    <thetext>Committed r242409: &lt;https://trac.webkit.org/changeset/242409&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560449</commentid>
    <comment_count>26</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-08-12 10:04:12 -0700</bug_when>
    <thetext>*** Bug 154642 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362617</attachid>
            <date>2019-02-21 10:12:26 -0800</date>
            <delta_ts>2019-02-26 16:03:24 -0800</delta_ts>
            <desc>WIP Patch</desc>
            <filename>bug-194867-20190221101225.patch</filename>
            <type>text/plain</type>
            <size>259803</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTZkYTUzZmU4ZTA0YWQ3
OWRkMDZjMTE3YzQxMGEwNDBiMmI5N2U3Ni4uZTc2NWUzOWI4MWUxNmRlYTRhZTQwNzZmMjk1MmM4
MjhhMzk1OTNhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBv
cnQgdXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxz
byBleHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdl
YkNvcmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRh
YmFzZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIw
MTktMDItMTkgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNDE3MjIuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ5YTIxZDlk
YTViZjVjOWI3MmRjOTgyMTgyNzJhYTM4OTg5OWNhMWMuLmZjZjQ1M2NlMjQ0Y2RkNWU3MDgxMTZj
NmIwYTJjNjVkNTI0Y2ZiOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgzIEBACisyMDE5LTAyLTIx
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNR
TGl0ZSBkYXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgZGF0YWJh
c2UgcGxpc3QgaXMgaW5lZmZpY2llbnQuIEl0IHJlcXVpcmVzIG1vcmUgbWVtb3J5IHVzZQorICAg
ICAgICB0aGFuIGl0IG5lZWRzLCBhbmQgZm9yY2VzIGxvdHMgb2YgbG9vcGluZyBhbmQgc3RyaW5n
IGNvbXBhcmlzb25zIHRvIGZpbmQgaW5mb3JtYXRpb24uCisKKyAgICAgICAgVGhpcyBwcm9ibGVt
IGhhcyBhbHJlYWR5IGJlZW4gc29sdmVkIGluIHRoZSBmb3JtIG9mIHJlbGF0aW9uYWwgZGF0YWJh
c2VzLiBXZSB1c2UgdGhlbQorICAgICAgICBlbHNld2hlcmUgaW4gV2ViS2l0LCBhbmQgc2hvdWxk
IGRvIHNvIGZvciB0aGlzIHN0b3JhZ2UgYXMgd2VsbC4KKworICAgICAgICBUaGlzIHBhdGNoIGNy
ZWF0ZXMgYW4gb3B0aW9uYWwgU1FMaXRlIGRhdGFiYXNlIHRvIGhhbmRsZSBJVFAgb3BlcmF0aW9u
cy4KKworICAgICAgICAxLiBJdCBhZGRzIGEgbmV3IGludGVybmFsIGV4cGVyaW1lbnRhbCBmZWF0
dXJlIGZsYWcgdG8gYWN0aXZhdGUgaXQuIEl0IHJlcXVpcmVzIHRoZSB1c2VyCisgICAgICAgICAg
IGV4aXQgYW5kIHJlc3RhcnQgdGhlIHByb2Nlc3MgdG8gdGFrZSBlZmZlY3QuCisgICAgICAgIDIu
IEl0IHBvcHVsYXRlcyBpdHNlbGYgZnJvbSB0aGUgZXhpc3RpbmcgcGxpc3QgZmlsZSAoaWYgaXQg
ZXhpc3RzKS4KKyAgICAgICAgMy4gSXQgc3RvcHMgdXNpbmcgdGhlIHBsaXN0IGluIGZhdm9yIG9m
IHRoZSBkYXRhYmFzZS4KKyAgICAgICAgNC4gSXQgZG9lcyBxdWVyaWVzIGFuZCBvdGhlciBvcGVy
YXRpb25zIHVzaW5nIHRoZSBkYXRhYmFzZSBpbnN0ZWFkIG9mIHRoZSBvbGQgaGFzaCB0YWJsZQor
ICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBUaGlzIHBhdGNoIHJlZmFjdG9y
cyB0aGUgZXhpc2l0aW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSBjbGFzcyBp
bnRvIGEgYmFzZQorICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgY2xhc3MsIHdo
aWNoIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSBpcyBiYXNlZCBvbi4KKyAgICAg
ICAgSXQgYWRkcyBhIG5ldyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSB0aGF0
IGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIFNRTAorICAgICAgICBvcGVyYXRpb25zLgorCisg
ICAgICAgIFRoZXNlIGNvZGUgY2hhbmdlcyBzaG91bGQgbm90IGhhdmUgYW55IGltcGFjdCBvbiBl
eGlzdGluZyBvcGVyYXRpb25zLCBhbmQgd2hlbiBlbmFibGVkCisgICAgICAgIHNob3VsZCBwcm9k
dWNlIHRoZSBzYW1lIHRlc3QgcmVzdWx0cy4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVwYXJlU3Rh
dGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppbnNlcnRPYnNlcnZlZERvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWxhdGlvbnNoaXBFeGlzdHMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3QgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9t
YWluSURGcm9tU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZGF0YWJhc2VJ
c0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRl
bGVtZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1
cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4p
OgorICAgICAgICAoV2ViS2l0OjpidWlsZExpc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVj
dGVkVG9QcmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpsaXN0VG9TdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZl
cnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNlcyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVByZXZhbGVu
dFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzeW5jU3RvcmFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFz
U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1Vu
ZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpn
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVn
TW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291
cmNlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVz
ZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2Up
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0RG9tYWluc0FzUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBy
ZWRpY2F0ZVZhbHVlRm9yRG9tYWluIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVk
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmlzR3JhbmRmYXRoZXJlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVUcmVhdG1lbnRGb3JPcmlnaW4gY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9j
ayBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFp
bnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cmV2YWxlbnREb21haW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGlj
c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNF
bXB0eSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50
UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzeW5jU3RvcmFnZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhl
ckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6ZG9tYWluc1RvU3RyaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0gY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRv
cjw9IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6T3Bl
cmF0aW5nRGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Om1lcmdlT3BlcmF0aW5nRGF0
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0Ojpjb21wdXRlSW1wb3J0YW5jZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRy
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2FjaGVNYXhBZ2VDYXApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDbGllbnRTaWRl
Q29va2llc0FnZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0Rh
dGVJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dE1heFN0YXRpc3RpY3NFbnRyaWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaDoK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpkYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjppc0RlYnVnTW9kZUVuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN0b3JlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6ZG9tYWluc1RvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6T3Bl
cmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0
ZTo6dG9kYXkpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpzZWNvbmRzU2luY2VF
cG9jaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0g
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjw9IGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29t
cHV0ZUltcG9ydGFuY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNv
cmRzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9j
ZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NQ
cm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRU
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5k
ZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXApOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2ll
cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRl
Q2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5n
UmVtb3ZlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlz
dGljcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c3RhdGlzdGljc0VwaXJhdGlvblRpbWUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlT3BlcmF0aW5nRGF0ZXMpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0
aW5nRGF0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50
cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dUZXN0aW5nRXZlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6T3Bl
cmF0aW5nRGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNEZWJ1Z01vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdG9yZSBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNF
bmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbTogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZUNvY29hLm1tLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
VW5kZXJPcGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyZm9ybURhaWx5VGFza3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nV2ViU29j
a2V0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2lu
Z1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhl
cmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1Rv
RGVmYXVsdFZhbHVlcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjppbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAg
ICogUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOjpj
YWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UpOgorICAgICAgICAqIFBsYXRmb3JtL2NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaDoKKyAgICAgICAgKiBTaGFyZWQv
V2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBT
b3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9v
bENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0
aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHA6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIw
MTktMDItMTkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQGFwcGxlLmNvbT4KIAogICAgICAgICBb
aU9TXSAidG91Y2gtYWN0aW9uOiBub25lIiBzaG91bGQgbm90IHByZXZlbnQgdGV4dCBzZWxlY3Rp
b24gb3IgdGFwcGluZyBvbiBhIGxpbmsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgKaW5kZXggNzE3NmQyZmY2YmU3NzZiOThmOWMyNTRlY2FjODYxZmIwYzAy
NjM3Yy4uNDY5MWM5MzllZDY0ZWVlMzRhODJiNzEwODk1Nzg1ODA0NjQzNTEzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFi
bGVkKSB7IG1faXRwRGVidWdNb2RlID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01v
ZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQg
c2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBtX2l0cERhdGFiYXNl
TW9kZSA9IGlzRW5hYmxlZDsgfQorICAgIGJvb2wgaXRwRGF0YWJhc2VNb2RlRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXRwRGF0YWJhc2VNb2RlOyB9CisKICAgICB2b2lkIHNldFJlc3RyaWN0
ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1Jlc3RyaWN0ZWRIVFRQ
UmVzcG9uc2VBY2Nlc3MgPSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHJlc3RyaWN0ZWRIVFRQUmVz
cG9uc2VBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzdHJpY3RlZEhUVFBSZXNwb25zZUFj
Y2VzczsgfQogCkBAIC0zNTEsNyArMzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgbW91c2Vtb3Zl
RXZlbnRIYW5kbGluZ1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX21v
dXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkOyB9CiAgICAgdm9pZCBz
ZXRNb3VzZW1vdmVFdmVudEhhbmRsaW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBtX21vdXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkID0g
aXNFbmFibGVkOyB9CiAjZW5kaWYKLSAgICAKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzJiBzaGFyZWRGZWF0dXJlcygpOwogCiBwcml2YXRlOgpAQCAt
NTM0LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21vdXNlbW92ZUV2ZW50SGFuZGxp
bmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCisgICAgYm9vbCBt
X2l0cERhdGFiYXNlTW9kZSB7IGZhbHNlIH07CisKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZl
ckRlc3Ryb3llZDxSdW50aW1lRW5hYmxlZEZlYXR1cmVzPjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggNTdkMmFkODY5ZDRkMjMxN2Fi
MDYzYjVkNmJhZTE0ZDllZjA5ZmE0Ni4uYzliMzEwMjQ0MjA3YmM3NjhmZWM5MjlmMDI1ZjA1NDZi
OTZiMDM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgdGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckFsbFRhYmxlcygp
OwotICAgIGludCBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IHJ1
blZhY3V1bUNvbW1hbmQoKTsKICAgICBpbnQgcnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7
CiAgICAgCiAgICAgYm9vbCB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGExOTNkOGMyNGIwYmQwMjQ5NjViYjEwNTQ0NjQyM2Ji
YzhmNWJmZTkuLmYzNjZjNzMwMmY0YmE1YTVmNGFjMWE2MWMxNjI2MzMxMzkzMmQzZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKQEAgLTc2LDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpOwogICAg
IFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBnZXRDb2x1bW5UZXh0KGludCBjb2wpOwotICAgIGRvdWJsZSBnZXRDb2x1bW5Eb3VibGUo
aW50IGNvbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgZG91YmxlIGdldENvbHVtbkRvdWJsZShpbnQg
Y29sKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgZ2V0Q29sdW1uSW50KGludCBjb2wpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGludDY0X3QgZ2V0Q29sdW1uSW50NjQoaW50IGNvbCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI2YTg2Y2RiMmQxOTBmMTI0ZDkzZmJhZjc5YjE2ZDJmNzEwZmE3ODEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTU4MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9L
ZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgorI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQs
IC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
LCBOZXR3b3JrLCAiJXAgLSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hlY2tlcjo6IiBmbXQsIHRoaXMs
ICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoc2Vz
c2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1JfSUYoc2Vzc2lvbklELmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hl
Y2tlcjo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisKKy8qCisgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgRGF0YWJhc2UKK3N0cnVjdCBkYl9TdGF0aXN0aWNzTGFzdFNlZW4geworICAgIFN0
cmluZyB0b3BQcml2YXRlbHlPd25lZERvbWFpbjsKKyAgICBXYWxsVGltZSBsYXN0U2VlbjsKK307
CisKK3N0YXRpYyB2b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgc3RhdGlzdGljc01hcCwgVmVjdG9yPGRiX1N0YXRpc3Rp
Y3NMYXN0U2Vlbj4mIHN0YXRpc3RpY3NUb1BydW5lLCBzaXplX3QmIG51bWJlck9mRW50cmllc1Rv
UHJ1bmUpCit7CisgICAgaWYgKHN0YXRpc3RpY3NUb1BydW5lLnNpemUoKSA+IG51bWJlck9mRW50
cmllc1RvUHJ1bmUpIHsKKyAgICAgICAgc3RkOjpzb3J0KHN0YXRpc3RpY3NUb1BydW5lLmJlZ2lu
KCksIHN0YXRpc3RpY3NUb1BydW5lLmVuZCgpLCBbXShjb25zdCBkYl9TdGF0aXN0aWNzTGFzdFNl
ZW4mIGEsIGNvbnN0IGRiX1N0YXRpc3RpY3NMYXN0U2VlbiYgYikgeworICAgICAgICAgICAgcmV0
dXJuIGEubGFzdFNlZW4gPCBiLmxhc3RTZWVuOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMCwgZW5kID0gc3RkOjptaW4obnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSwg
c3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgpKTsgaSAhPSBlbmQ7ICsraSwgLS1udW1iZXJPZkVudHJp
ZXNUb1BydW5lKQorICAgICAgICBzdGF0aXN0aWNzTWFwLnJlbW92ZShzdGF0aXN0aWNzVG9QcnVu
ZVtpXS50b3BQcml2YXRlbHlPd25lZERvbWFpbik7Cit9CisqLworCitSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUo
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVl
dWUsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgpCisgICAgOiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSkKKyAgICAsIG1fc3RvcmFnZURpcmVj
dG9yeVBhdGgoc3RvcmFnZURpcmVjdG9yeVBhdGggKyBTdHJpbmcoIi9vYnNlcnZhdGlvbnMuZGIi
KSkKKyAgICAsIG1fZGF0YWJhc2UobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZT4oKSkKKyAgICAsIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQobWFrZVVuaXF1ZVJl
ZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJJTlNFUlQgSU5U
TyBPYnNlcnZlZERvbWFpbnMgKGhpZ2hMZXZlbERvbWFpbiwgbGFzdFNlZW4sIGhhZFVzZXJJbnRl
cmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlz
UHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCB0aW1lc0FjY2Vzc2VkQXNGaXJz
dFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8s
ID8sID8sID8pIl9zKSkKKyAgICAsIG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQobWFr
ZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJJ
TlNFUlQgSU5UTyBUb3BMZXZlbERvbWFpbnMgVkFMVUVTICg/KSJfcykpCisgICAgLCBtX2RvbWFp
bklERnJvbVN0cmluZ1N0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSBoaWdoTGV2ZWxEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fc3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVPcmlnaW5zU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiSU5TRVJUIElOVE8gU3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVPcmlnaW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkgU0VMRUNU
ID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhpZ2hMZXZlbERvbWFpbiA9
PSA/Il9zKSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyhtYWtlVW5pcXVlUmVm
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJTlRP
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKHNvdXJjZURvbWFpbklELCB0b0RvbWFpbklEKSBT
RUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGlnaExldmVsRG9t
YWluID09ID8iX3MpKQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzKG1h
a2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAi
U0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdI
RVJFIHNvdXJjZURvbWFpbklEID0gPyBBTkQgdG9Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQg
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGlnaExldmVsRG9tYWluID0gPykpIl9zKSkKKyAg
ICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiSU5TRVJUIElOVE8gVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNGcm9tICh0YXJnZXREb21haW5JRCwgZnJvbURvbWFpbklEKSBTRUxFQ1Qg
PywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGlnaExldmVsRG9tYWluID0g
PyJfcykpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cyhtYWtlVW5p
cXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVD
VCBFWElTVFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIFdIRVJF
IHRhcmdldERvbWFpbklEID0gPyBBTkQgZnJvbURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBG
Uk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoaWdoTGV2ZWxEb21haW4gPSA/KSkiX3MpKQorICAg
ICwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiSU5TRVJUIElOVE8gU3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2lucyAoc3ViRnJhbWVEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkg
U0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhpZ2hMZXZlbERv
bWFpbiA9ID8iX3MpKQorICAgICwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5FeGlzdHMo
bWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCks
ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMgV0hFUkUgc3ViRnJhbWVEb21haW5JRCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSAoU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhpZ2hMZXZlbERvbWFpbiA9
ID8pKSJfcykpCisgICAgLCBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMobWFrZVVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJJTlNF
UlQgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIChzdWJyZXNvdXJjZURvbWFp
bklELCB0b3BGcmFtZURvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgaGlnaExldmVsRG9tYWluID0gPyJfcykpCisgICAgLCBtX3N1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbkV4aXN0cyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00g
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklE
ID0gPyBBTkQgdG9wRnJhbWVEb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgaGlnaExldmVsRG9tYWluID0gPykpIl9zKSkKKyAgICAsIG1fc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJTlRPIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8gKHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQpIFNFTEVDVCA/LCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoaWdoTGV2ZWxEb21haW4gPT0gPyJfcykp
CisgICAgLCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMobWFrZVVuaXF1ZVJl
ZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgRVhJ
U1RTIChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3Vi
cmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRvRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhpZ2hMZXZlbERvbWFpbiA9ID8pKSJfcykpCisgICAg
LCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbShtYWtlVW5pcXVlUmVmPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJTlRPIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoc3VicmVzb3VyY2VEb21haW5JRCwgZnJvbURvbWFpbklE
KSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGlnaExldmVs
RG9tYWluID09ID8iX3MpKQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21F
eGlzdHMobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2Uu
Z2V0KCksICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbSBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBBTkQgZnJvbURvbWFpbklE
ID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoaWdoTGV2ZWxE
b21haW4gPSA/KSkiX3MpKQorICAgICwgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVt
ZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdl
dCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaGFkVXNlckludGVyYWN0aW9uID0gPywg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSA/IFdIRVJFIGhpZ2hMZXZlbERvbWFpbiA9
ID8iX3MpKQorICAgICwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGxhc3RTZWVuID0gPyBXSEVSRSBoaWdoTGV2ZWxEb21haW4gPSA/Il9zKSkK
KyAgICAsIG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2
ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9ID8gV0hFUkUgaGlnaExldmVsRG9tYWluID0gPyJf
cykpCisgICAgLCBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgaXNQcmV2
YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGlnaExldmVsRG9tYWluID0gPyJfcykp
CisgICAgLCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtYWtlVW5pcXVl
UmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGlzVmVyeVByZXZhbGVudCA9ID8gV0hFUkUgaGlnaExldmVsRG9t
YWluID0gPyJfcykpCisgICAgLCBtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1h
a2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAi
U0VMRUNUIGlzVmVyeVByZXZhbGVudCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoaWdoTGV2
ZWxEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQo
KSwgIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMCwgaXNWZXJ5UHJl
dmFsZW50ID0gMCBXSEVSRSBoaWdoTGV2ZWxEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBkYXRl
SGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
aGFkVXNlckludGVyYWN0aW9uID0gPyBXSEVSRSBoaWdoTGV2ZWxEb21haW4gPSA/Il9zKSkKKyAg
ICAsIG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIGhhZFVzZXJJbnRlcmFj
dGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgaGlnaExldmVsRG9tYWluID0gPyJfcykpCisgICAgLCBtX3VwZGF0ZU1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSA/IFdIRVJFIGhpZ2hMZXZlbERvbWFpbiA9
ID8iX3MpKQorICAgICwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50KG1ha2VVbmlxdWVS
ZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9i
c2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9ID8gV0hFUkUgaGlnaExldmVsRG9tYWlu
ID0gPyJfcykpCisgICAgLCBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudChtYWtlVW5pcXVlUmVm
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBncmFu
ZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhpZ2hMZXZlbERvbWFpbiA9ID8i
X3MpKQorICAgICwgbV91cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQobWFrZVVuaXF1
ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUg
T2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSA/IFdIRVJFIGhpZ2hMZXZl
bERvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24gPSA/IFdIRVJF
IGhpZ2hMZXZlbERvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNG
aXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVk
RG9tYWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQ
SSA9ID8gV0hFUkUgaGlnaExldmVsRG9tYWluID0gPyJfcykpCisgICAgLCBtX2ZpbmRFeHBpcmVk
VXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lIDwgPyJfcykpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVk
KCk7CisjZW5kaWYKKworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcGF0aCA9IG1f
c3RvcmFnZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlLT5vcGVuKHBhdGgpKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6b3BlbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMsIGRhdGFi
YXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSwg
cGF0aC51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFNpbmNlIHdlIGFyZSB1c2luZyBhIHdvcmtlclF1ZXVlLCB0aGUgc2VxdWVudGlhbCBkaXNw
YXRjaCBibG9ja3MgbWF5IGJlIGNhbGxlZCBieSBkaWZmZXJlbnQgdGhyZWFkcy4KKyAgICAgICAg
bV9kYXRhYmFzZS0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgICAgIGlmICghbV9k
YXRhYmFzZS0+dGFibGVFeGlzdHMoIk9ic2VydmVkRG9tYWlucyIpKSB7CisgICAgICAgICAgICBp
ZiAoIWNyZWF0ZVNjaGVtYSgpKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVi
bGljfXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghcHJlcGFyZVN0YXRlbWVudHMoKSkgewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBhcmVTdGF0
ZW1lbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cywgZGF0YWJhc2UgcGF0aDog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpLCBwYXRoLnV0Zjgo
KS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgbV93b3JrUXVldWUt
PmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAg
ICAgICAgaWYgKHdlYWtUaGlzKQorICAgICAgICAgICAgd2Vha1RoaXMtPmNhbGN1bGF0ZUFuZFN1
Ym1pdFRlbGVtZXRyeSgpOworICAgIH0pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRF
IFRBQkxFIE9ic2VydmVkRG9tYWlucyAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgaGln
aExldmVsRG9tYWluIFRFWFQgTk9UIE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RT
ZWVuIFJFQUwgTk9UIE5VTEwsIGhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVk
IElOVEVHRVIgTk9UIE5VTEwsIGlzUHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVBy
ZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBkYXRhUmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1Qg
TlVMTCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uIElOVEVH
RVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NB
UEkgSU5URUdFUiBOT1QgTlVMTCk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
Y3JlYXRlIE9ic2VydmVkRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2Rh
dGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29t
bWFuZCgiQ1JFQVRFIFRBQkxFIFRvcExldmVsRG9tYWlucyAodG9wTGV2ZWxEb21haW5JRCBJTlRF
R0VSIFBSSU1BUlkgS0VZLCBGT1JFSUdOIEtFWSh0b3BMZXZlbERvbWFpbklEKSBSRUZFUkVOQ0VT
IE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGNyZWF0ZSBUb3BMZXZlbERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVz
IiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFN0b3JhZ2UgQWNjZXNzIFN0
YXRpc3RpY3MuCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRB
QkxFIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucyAoZG9tYWluSUQgSU5URUdFUiBO
T1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZB
SUwsIEZPUkVJR04gS0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21h
aW5JRCksIEZPUkVJR04gS0VZKHRvcExldmVsRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxE
b21haW5zKHRvcExldmVsRG9tYWluSUQpKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBU
b3AgRnJhbWUgU3RhdGlzdGljcy4KKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21tYW5k
KCJDUkVBVEUgVEFCTEUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyAoc291cmNlRG9tYWluSUQg
SU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBGT1JFSUdOIEtF
WShzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21h
aW5JRCksIEZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5z
KHRvcExldmVsRG9tYWluSUQpKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLT5l
eGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAo
dGFyZ2V0RG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgZnJvbURvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIEZPUkVJR04gS0VZKHRhcmdldERvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9t
YWlucyh0b3BMZXZlbERvbWFpbklEKSwgRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZFUkVO
Q0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSk7IikpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJs
ZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gU3ViZnJhbWUgU3RhdGlzdGljcy4KKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVD
b21tYW5kKCJDUkVBVEUgVEFCTEUgU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyAoc3ViRnJh
bWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b3BGcmFtZURvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIEZPUkVJR04gS0VZKHN1YkZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWRE
b21haW5zKGRvbWFpbklEKSwgRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNF
UyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkpOyIpKSB7CisgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIHRhYmxl
IGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBTdWJyZXNvdXJjZSBTdGF0aXN0aWNzLgorICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0
ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIChz
dWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWluSUQgSU5U
RUdFUiBOT1QgTlVMTCwgRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNF
UyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpLCBGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklE
KSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSk7IikpIHsKKyAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
KCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIChzdWJyZXNvdXJjZURvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgRk9SRUlHTiBLRVkoc3Vi
cmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpLCBG
T1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5J
RCkpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJh
c2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21tYW5k
KCJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIChzdWJyZXNvdXJj
ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
LCBGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9t
YWlucyhkb21haW5JRCksIEZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNl
cnZlZERvbWFpbnMoZG9tYWluSUQpKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFy
ZVN0YXRlbWVudHMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAg
ICAKKyAgICBpZiAobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+cHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50LT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fZG9tYWluSURGcm9tU3RyaW5nU3Rh
dGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVPcmlnaW5zU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby0+cHJlcGFyZSgpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c0Zyb21FeGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9z
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLT5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy0+
cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbkV4aXN0cy0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLT5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNGcm9tRXhpc3RzLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBk
YXRlTGFzdFNlZW5TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVt
ZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZh
bGVudFJlc291cmNlU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlSGFkVXNlckludGVyYWN0aW9uU3Rh
dGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faGFkVXNlckludGVy
YWN0aW9uU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBk
YXRlTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LT5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlRGF0YVJlY29yZHNS
ZW1vdmVkU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBk
YXRlVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uU3RhdGVtZW50
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlVGltZXNBY2Nlc3Nl
ZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSVN0YXRlbWVudC0+cHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICkgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVudHMgZmFpbGVkIHRvIHBy
ZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0
RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4o
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCit7
CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGxv
YWRTdGF0aXN0aWNzLmhpZ2hMZXZlbERvbWFpbikpOworI2VuZGlmCisKKyAgICBpZiAobV9pbnNl
cnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZFRleHQoMSwgbG9hZFN0YXRpc3RpY3MuaGln
aExldmVsRG9tYWluKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBsb2FkU3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNv
bmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KDMsIGxvYWRTdGF0aXN0aWNzLmhhZFVz
ZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWRE
b21haW5TdGF0ZW1lbnQtPmJpbmREb3VibGUoNCwgbG9hZFN0YXRpc3RpY3MubW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludCg1
LCBsb2FkU3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludCg2LCBsb2FkU3RhdGlzdGlj
cy5pc1ByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRP
YnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludCg3LCBsb2FkU3RhdGlzdGljcy5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2
ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoOCwgbG9hZFN0YXRpc3RpY3MuZGF0YVJlY29yZHNS
ZW1vdmVkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0
YXRlbWVudC0+YmluZEludCg5LCBsb2FkU3RhdGlzdGljcy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBh
cnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50KDEwLCBsb2FkU3RhdGlzdGljcy50aW1l
c0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKSAhPSBTUUxJVEVfT0sp
IHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2Vy
dmVkRG9tYWluIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhp
cywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1f
aW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWRE
b21haW4gZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCByZXNl
dFJlc3VsdCA9IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAg
QVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpyZWxhdGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0
ZW1lbnQsIHVuc2lnbmVkIGZpcnN0RG9tYWluSUQsIGNvbnN0IFN0cmluZyYgc2Vjb25kRG9tYWlu
KSBjb25zdAoreworICAgIGlmIChzdGF0ZW1lbnQuYmluZEludCgxLCBmaXJzdERvbWFpbklEKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDIsIHNlY29uZERvbWFp
bikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JP
VykgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3
b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV9pbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6
ICV7cHVibGljfXMiLCB0aGlzLCBjb25zdF9jYXN0PFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlJj4o
bV9kYXRhYmFzZS5nZXQoKSkubGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAg
IGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmdldENvbHVtbkludCgwKSA/IHRydWUgOiBmYWxzZTsK
KworICAgIGludCByZXNldFJlc3VsdCA9IHN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYg
c3RhdGVtZW50LCB1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZURvbWFp
bikKK3sKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwgdG9wRnJhbWVEb21haW4pICE9IFNR
TElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFpblJl
bGF0aW9uc2hpcFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJs
aWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGludCByZXNldFJlc3VsdCA9IHN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVT
RUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKKyNpZm5kZWYgTkRFQlVHCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGNvbnN0IFN0cmluZyYg
ZG9tYWluKSBjb25zdAoreworICAgIGlmIChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+
YmluZFRleHQoMSwgZG9tYWluKSAhPSBTUUxJVEVfT0spIHsKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQgdG8gYmluZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgICAgIAorICAgIGlmIChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+c3Rl
cCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5J
REZyb21TdHJpbmdTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVz
ZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0
YXRlbWVudC0+cmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJl
c3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisK
K3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJiBkb21haW4pIGNvbnN0Cit7CisgICAgdW5zaWduZWQgZG9t
YWluSUQgPSAwOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCBkb21haW4pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2RvbWFpbklERnJvbVN0
cmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5k
aWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBkb21haW5J
RDsKKyAgICB9CisKKyAgICBkb21haW5JRCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50
LT5nZXRDb2x1bW5JbnQoMCk7CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJv
bVN0cmluZ1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0
LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiBkb21haW5JRDsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBs
b2FkU3RhdGlzdGljcykKK3sKKyAgICBhdXRvIGhpZ2hMZXZlbERvbWFpbklEID0gZG9tYWluSURG
cm9tU3RyaW5nKGxvYWRTdGF0aXN0aWNzLmhpZ2hMZXZlbERvbWFpbik7CisgICAgZm9yIChjb25z
dCBhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lT3JpZ2lucykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zU3RhdGVtZW50LmdldCgpLCBoaWdoTGV2ZWxE
b21haW5JRCwgdG9wRnJhbWVEb21haW4pOworCisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BGcmFt
ZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pCisgICAg
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8u
Z2V0KCksIGhpZ2hMZXZlbERvbWFpbklELCB0b3BGcmFtZURvbWFpbi5rZXkpOworICAgIAorICAg
IGZvciAoY29uc3QgYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcCht
X3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgaGlnaExldmVsRG9tYWluSUQsIHRv
cEZyYW1lRG9tYWluLmtleSk7CisgICAgCisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BGcmFtZURv
bWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMpCisgICAg
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMuZ2V0KCksIGhpZ2hMZXZlbERvbWFpbklELCB0b3BGcmFtZURvbWFpbi5rZXkpOworICAgIAor
ICAgIGZvciAoY29uc3QgYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXAobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmdldCgpLCBoaWdoTGV2ZWxE
b21haW5JRCwgdG9wRnJhbWVEb21haW4ua2V5KTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHRvcEZyYW1lRG9tYWluIDogbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUbykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUby5nZXQoKSwgaGlnaExldmVsRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluLmtl
eSk7CisgICAgCisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0
aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSkKKyAgICAgICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmdldCgpLCBo
aWdoTGV2ZWxEb21haW5JRCwgdG9wRnJhbWVEb21haW4ua2V5KTsKK30KKworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgp
KSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIE9ic2VydmVkRG9tYWlucyJfcyk7CisgICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC5zdGVw
KCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyBmYWxzZSA6IHRydWU7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNv
bnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYgbWVtb3J5U3RvcmUpCit7Cisg
ICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCB3ZWFrTWVtb3J5U3RvcmUgPSBtYWtlV2Vh
a1B0cihtZW1vcnlTdG9yZSldIHsKKyAgICAgICAgaWYgKCF3ZWFrTWVtb3J5U3RvcmUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFkYXRhYmFzZUlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBhdXRvJiBzdGF0aXN0aWNzTWFwID0gd2Vh
a01lbW9yeVN0b3JlLT5kYXRhKCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGlzdGlj
IDogc3RhdGlzdGljc01hcCkKKyAgICAgICAgICAgIGluc2VydE9ic2VydmVkRG9tYWluKHN0YXRp
c3RpYy52YWx1ZSk7CisKKyAgICAgICAgLy8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9yIGludGVy
LWRvbWFpbiByZWxhdGlvbnNoaXBzIHNvIHdlCisgICAgICAgIC8vIGNhbiByZWZlciB0byB0aGUg
T2JzZXJ2ZWREb21haW4gdGFibGUgZW50cmllcworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0
YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXApCisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXBzKHN0YXRpc3RpYy52YWx1ZSk7CisKKyAgICAgICAgbV9kYXRhYmFzZS0+cnVuVmFjdXVt
Q29tbWFuZCgpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdAoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUUoV0lQKTogSW1wbGVtZW50
IGZvciBEYXRhYmFzZSB2ZXJzaW9uLgorICAgIC8vIGlmIChtX3BhcmFtZXRlcnMuc2hvdWxkU3Vi
bWl0VGVsZW1ldHJ5KQorICAgIC8vICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1l
dHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKnRoaXMpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9t
YWlucyhjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnMpCit7CisgICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOworICAgIGZvciAoYXV0byBkb21haW5OYW1lIDogZG9tYWlucykgeworICAgICAg
ICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7CisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGRvbWFpbk5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIlwiIik7CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudChtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJF
IGhpZ2hMZXZlbERvbWFpbiBJTiAoIiwgYnVpbGRlci50b1N0cmluZygpLCAiKSIpKTsKKyAgICBp
ZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFN0YXRpc3Rp
Y3NGb3JEb21haW5zIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwg
dGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21h
aW5zIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9k
YXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKwordW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4m
IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNp
dmVDYWxscykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChu
dW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGly
ZWN0VHJhY2VCYWNrKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MsICJIaXQgJXUgcmVjdXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4gUmV0dXJu
aW5nIGVhcmx5LiIsIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNr
KTsKKyAgICAgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisgICAgfQorICAgIAor
ICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMrKzsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbmV3
bHlJZGVudGlmaWVkRG9tYWluczsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFN1YnJlc291cmNl
cyhtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJTRUxFQ1QgU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWlu
SUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcihwcmltYXJ5RG9tYWluSUQpLCAi
QU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiKSk7CisgICAgaWYgKGZpbmRTdWJy
ZXNvdXJjZXMucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoZmluZFN1
YnJlc291cmNlcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgYXV0byBuZXdE
b21haW4gPSBmaW5kU3VicmVzb3VyY2VzLmdldENvbHVtbkludCgwKTsKKyAgICAgICAgICAgIGF1
dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChu
ZXdEb21haW4pOworICAgICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCisgICAgICAg
ICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBmaW5kVG9wRnJhbWVzKG1fZGF0YWJh
c2UuZ2V0KCksIG1ha2VTdHJpbmcoIlNFTEVDVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20u
ZnJvbURvbWFpbklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4g
T2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSAiLCBT
dHJpbmc6Om51bWJlcihwcmltYXJ5RG9tYWluSUQpLCAiQU5EIE9ic2VydmVkRG9tYWlucy5pc1By
ZXZhbGVudCA9IDAiKSk7CisgICAgaWYgKGZpbmRUb3BGcmFtZXMucHJlcGFyZSgpID09IFNRTElU
RV9PSykgeworICAgICAgICB3aGlsZSAoZmluZFRvcEZyYW1lcy5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICAgICAgYXV0byBuZXdEb21haW4gPSBmaW5kVG9wRnJhbWVzLmdldENvbHVt
bkludCgwKTsKKyAgICAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVk
aXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW4pOworICAgICAgICAgICAgaWYgKGluc2Vy
dFJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5p
bnNlcnQobmV3RG9tYWluKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZXdseUlkZW50
aWZpZWREb21haW5zLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNh
bGxzOworCisgICAgZm9yIChhdXRvIGRvbWFpbklEIDogbmV3bHlJZGVudGlmaWVkRG9tYWlucykK
KyAgICAgICAgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5RmluZE5vblByZXZh
bGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbihkb21haW5JRCwgbm9uUHJldmFs
ZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKworICAgIHJl
dHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworfQorCitzdGF0aWMgU3RyaW5nIGJ1aWxkTGlz
dChjb25zdCBTdGRTZXQ8dW5zaWduZWQ+JiB2YWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOworICAgIGZvciAoYXV0byBkb21haW5JRCA6IHZhbHVlcykgeworICAgICAgICBpZiAo
IWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Cisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKGRvbWFpbklEKTsKKyAgICB9CisgICAgcmV0dXJu
IGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RkU2V0PHVuc2lnbmVk
PiBwcmV2YWxlbnREdWVUb1JlZGlyZWN0OworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJj
ZVJlZGlyZWN0U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNl
LmdldCgpKSwgIlNFTEVDVCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1
YnJlc291cmNlRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4g
T2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFs
ZW50ID0gMSJfcyk7CisgICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFy
ZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRv
UmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDApKTsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVSZWRpcmVjdFN0YXRl
bWVudChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksICJTRUxF
Q1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9N
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2
ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklE
IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJh
bWVSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdo
aWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAg
ICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBt
YXJrUHJldmFsZW50U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFi
YXNlLmdldCgpKSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2
YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QocHJldmFsZW50RHVlVG9S
ZWRpcmVjdCksICIpIikpOworICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBl
eGVjdXRlLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworc3RhdGljIFN0cmluZyBsaXN0VG9TdHJpbmcoVmVjdG9yPHVuc2lnbmVkPiB2YWx1
ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byB2YWx1ZSA6
IHZhbHVlcykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJl
cih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9
CisKK0hhc2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKQoreworICAgIEhhc2hNYXA8
dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IHJlc3VsdHM7CisKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudChjb25zdF9jYXN0
PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksICJTRUxFQ1QgZG9tYWluSUQsIGhp
Z2hMZXZlbERvbWFpbiwgaXNQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNW
ZXJ5UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNT
dGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAobm90VmVy
eVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAg
ICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIE5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFsdWUoeyBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
U3RhdGVtZW50LmdldENvbHVtblRleHQoMSkKKyAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdworICAgICAgICAgICAg
ICAgICwgMCwgMCwgMCwgMCB9KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYWRkKGtleSwgdmFsdWUp
OworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZv
ciAoYXV0byB2YWx1ZSA6IHJlc3VsdHMua2V5cygpKSB7CisgICAgICAgIGlmICghYnVpbGRlci5p
c0VtcHR5KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHZhbHVlKTsKKyAgICB9CisKKyAgICBhdXRvIGRvbWFp
bklEc09mSW50ZXJlc3QgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50KGNvbnN0X2Nh
c3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKSwgbWFrZVN0cmluZygiU0VMRUNU
IHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgi
LCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikp
OworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnRTdGF0ZW1lbnQu
cHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDAp
KTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAg
ICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnRTdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0
YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQoY29uc3Rf
Y2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCBtYWtlU3RyaW5nKCJTRUxF
Q1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAg
aWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkg
PT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJl
c3VsdCAhPSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkp
OworICAgICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnNDb3VudFN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4o
bV9kYXRhYmFzZS5nZXQoKSksIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklE
LCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVz
dCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudFN0YXRl
bWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWlu
SUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0Nv
dW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IHJlc3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3Vs
dHMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgp
KSwgbWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBG
Uk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIs
IGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAg
IGlmICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0g
cmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNl
cyA9IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIHJl
c291cmNlU3RhdGlzdGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNlcy52YWx1ZXMoKSkgewor
ICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFz
c2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYy5zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnByZXZhbGVuY2UpOworICAgICAg
ICBpZiAobmV3UHJldmFsZW5jZSAhPSByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKQorICAg
ICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMucHJpbWFyeURv
bWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpCit7CisgICAg
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgbWFya0FzUHJldmFs
ZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKKyAgICByZWNsYXNzaWZ5UmVzb3VyY2Vz
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNT
dG9yYWdlSWZOZWVkZWQoKQoreworICAgIG1fZGF0YWJhc2UtPnJ1blZhY3V1bUNvbW1hbmQoKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c3luY1N0b3Jh
Z2VJbW1lZGlhdGVseSgpCit7CisgICAgbV9kYXRhYmFzZS0+cnVuVmFjdXVtQ29tbWFuZCgpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNTdG9yYWdl
QWNjZXNzKGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcm
IHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2
NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5RG9tYWluKTsK
KworICAgIHN3aXRjaCAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lUHJpbWFyeURv
bWFpbikpIHsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZToK
KyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcDoKKyAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRyZWF0
bWVudFJlc3VsdDo6QWxsb3c6CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgYnJlYWs7
CisgICAgfTsKKyAgICAKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFr
ZVJlZihtX3N0b3JlKSwgc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gc3ViRnJhbWVQcmltYXJ5RG9t
YWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSB0b3BGcmFtZVByaW1h
cnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3Rv
cmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHN1YkZyYW1lUHJpbWFyeURv
bWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgW3N0
b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+
c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIHJlc3VsdF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3RyaW5nJiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJp
bmcmJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBh
Z2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VB
Y2Nlc3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihzdWJGcmFtZVByaW1hcnlEb21haW4pOworCisgICAgc3dpdGNoIChjb29raWVUcmVhdG1l
bnRGb3JPcmlnaW4oc3ViRnJhbWVQcmltYXJ5RG9tYWluKSkgeworICAgIGNhc2UgQ29va2llVHJl
YXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOiB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8g
JXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBj
b250ZXh0cyBhbmQgaXQgaGFzIG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0
LXBhcnR5LiIsIHN1YkZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1
ZXN0QWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVU
cmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcDogeworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGly
ZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZVByaW1hcnlEb21haW4udXRmOCgpLmRhdGEoKSk7
CisjZW5kaWYKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6
SGFzQWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVU
cmVhdG1lbnRSZXN1bHQ6OkFsbG93OgorICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIGJy
ZWFrOworICAgIH07CisKKyAgICBVTlVTRURfUEFSQU0odG9wRnJhbWVQcmltYXJ5RG9tYWluKTsK
KyAgICBVTlVTRURfUEFSQU0oZnJhbWVJRCk7CisgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHByb21wdEVuYWJsZWQpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0
b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOworCisgICAgLy8gRklYTUUo
V0lQKTogSW1wbGVtZW50IFN0b3JhZ2VBY2Vzc3MKKyAgICAvKgorICAgIGF1dG8gdXNlcldhc1By
b21wdGVkRWFybGllciA9IHByb21wdEVuYWJsZWQgJiYgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNj
ZXNzVGhyb3VnaFByb21wdChzdWJGcmFtZVN0YXRpc3RpYywgdG9wRnJhbWVQcmltYXJ5RG9tYWlu
KTsKKyAgICBpZiAocHJvbXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21wdGVkRWFybGllcikgewor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1f
ZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQg
dG8gYXNrIHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNz
IHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwgc3ViRnJhbWVQcmltYXJ5
RG9tYWluLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgp
KTsKKyNlbmRpZgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVz
OjpSZXF1aXJlc1VzZXJQcm9tcHQpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmICh1
c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1Ymxp
Y31zIHVuZGVyICV7cHVibGljfXMuIiwgc3ViRnJhbWVQcmltYXJ5RG9tYWluLnV0ZjgoKS5kYXRh
KCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbi51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIH0K
KworICAgIHN1YkZyYW1lU3RhdGlzdGljLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0
b3JhZ2VBY2Nlc3NBUEkrKzsKKworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1v
dmUoc3ViRnJhbWVQcmltYXJ5RG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZVByaW1hcnlEb21haW4p
LCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCB3YXNHcmFudGVkQWNjZXNz
KSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZEFjY2VzcyA/
IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNh
bm5vdFJlcXVlc3RBY2Nlc3MpOworICAgIH0pOworICAgICAqLworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90
IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NF
UlQocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVuZXJQcmltYXJ5RG9t
YWluKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChwcmltYXJ5
RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lclByaW1hcnlEb21haW4pCisgICAg
ICAgIHJldHVybjsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21h
aW4ocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7CisKKyAgICBpZiAoY29va2ll
VHJlYXRtZW50Rm9yT3JpZ2luKHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpICE9
IENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3cpCisgICAgICAgIHJldHVybjsKKworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dp
bmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJh
dGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtwdWJsaWN9cyB1
bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBp
biB0aGUgb3BlbmVkIHdpbmRvdy4iLCBwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
LnV0ZjgoKS5kYXRhKCksIG9wZW5lclByaW1hcnlEb21haW4udXRmOCgpLmRhdGEoKSk7CisjZW5k
aWYKKyAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHByaW1hcnlEb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBXVEZNb3ZlKG9wZW5lclByaW1hcnlEb21haW4pLCBXVEY6
Om51bGxvcHQsIG9wZW5lclBhZ2VJRCwgZmFsc2UsIFtdKGJvb2wpIHsgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhT
dHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FKFdJUCk6IEltcGxlbWVudCBTdG9y
YWdlQWNlc3NzCisgICAgVU5VU0VEX1BBUkFNKHN1YkZyYW1lSG9zdCk7CisgICAgVU5VU0VEX1BB
UkFNKHRvcEZyYW1lSG9zdCk7CisgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOworICAgIFVOVVNF
RF9QQVJBTShwYWdlSUQpOworICAgIFVOVVNFRF9QQVJBTSh1c2VyV2FzUHJvbXB0ZWROb3cpOwor
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIC8qCisgICAgYXV0byBzdWJGcmFt
ZVByaW1hcnlEb21haW4gPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHN1
YkZyYW1lSG9zdCk7CisgICAgYXV0byB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzOjpwcmltYXJ5RG9tYWluKHRvcEZyYW1lSG9zdCk7CisgICAgaWYgKHVzZXJX
YXNQcm9tcHRlZE5vdykgeworICAgICAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5RG9tYWlu
KTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbik7
CisgICAgICAgIHN1YkZyYW1lU3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3Jp
Z2lucy5hZGQodG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICB9CisgICAgZ3JhbnRTdG9yYWdl
QWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRv
cEZyYW1lUHJpbWFyeURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICovCit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFs
KFN0cmluZyYmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgU3RyaW5nJiYgdG9wRnJhbWVQcmltYXJ5
RG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29s
IHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmIChzdWJGcmFtZVByaW1hcnlEb21haW4gPT0gdG9wRnJhbWVQcmltYXJ5RG9tYWluKSB7Cisg
ICAgICAgIGNhbGxiYWNrKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8g
RklYTUUoV0lQKTogSW1wbGVtZW50IGZvciBkYXRhYmFzZQorICAgIC8vIEZJWE1FOiBSZW1vdmUg
bV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxv
bmdlciBleHBlcmltZW50YWwuCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAm
JiBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCkgeworICAgICAgICAvLyBhdXRvJiBzdWJG
cmFtZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
c3ViRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgLy8gQVNTRVJUKHN1YkZyYW1lU3RhdGlz
dGljLmhhZFVzZXJJbnRlcmFjdGlvbik7CisgICAgICAgIC8vIEFTU0VSVChzdWJGcmFtZVN0YXRp
c3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVQ
cmltYXJ5RG9tYWluKSk7CisgICAgICAgIC8vIHN1YkZyYW1lU3RhdGlzdGljLm1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOworICAgIH0KKworICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gc3ViRnJhbWVQcmlt
YXJ5RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSB0b3BGcmFt
ZVByaW1hcnlEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgc3RvcmUgPSBt
YWtlUmVmKG1fc3RvcmUpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUg
eworICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3ViRnJhbWVQ
cmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHN0b3JlID0gc3RvcmUuY29weVJlZigpXShib29s
IHZhbHVlKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgdmFsdWVdICgpIG11dGFibGUg
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGRvbWFpbnMpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBTdG9yYWdlQWNlc3NzCisgICAg
QVNTRVJUKDApOworfQorCitWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKK3sKKyAg
ICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZl
Y3RvcjxTdHJpbmc+IHByaW1hcnlEb21haW5zVG9CbG9jazsKKyAgICBwcmltYXJ5RG9tYWluc1Rv
QmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKworICAgIGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4oZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSk7Cisg
ICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSwgUmVz
b3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVu
Y2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKTsKKworICAgIGlmICgh
bV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLmlzRW1wdHkoKSkgeworICAgICAgICBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKG1fZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSk7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKG1fZGVidWdNYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAg
IHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgUkVMRUFT
RV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGlj
fXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1v
ZGUuIiwgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLnV0ZjgoKS5kYXRhKCkpOworI2Vu
ZGlmCisgICAgfQorCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9u
KGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBtYWluRnJh
bWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0
IFN0cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVIb3N0LCBib29sIGlz
UmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBib29sIGFyZVRhcmdldEFuZE1haW5GcmFtZURvbWFpbnNBc3NvY2lhdGVk
ID0gdGFyZ2V0UHJpbWFyeURvbWFpbiA9PSBtYWluRnJhbWVQcmltYXJ5RG9tYWluOworICAgIGJv
b2wgYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQgPSB0YXJnZXRQcmltYXJ5RG9t
YWluID09IHNvdXJjZVByaW1hcnlEb21haW47CisKKyAgICBib29sIHN0YXRpc3RpY3NXZXJlVXBk
YXRlZCA9IGZhbHNlOworICAgIGlmICghaXNNYWluRnJhbWUgJiYgdGFyZ2V0SG9zdCAhPSBtYWlu
RnJhbWVIb3N0ICYmICEoYXJlVGFyZ2V0QW5kTWFpbkZyYW1lRG9tYWluc0Fzc29jaWF0ZWQgfHwg
YXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQpKSB7CisgICAgICAgIGF1dG8gdGFy
Z2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJn
ZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgdXBkYXRlTGFzdFNlZW4odGFyZ2V0UHJpbWFyeURv
bWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRp
bWU6Om5vdygpKSk7CisKKyAgICAgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5FeGlzdHMuZ2V0KCksIHRhcmdldFJlc3VsdC5zZWNvbmQsIG1h
aW5GcmFtZVByaW1hcnlEb21haW4pKSB7CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXAobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmdldCgpLCB0YXJnZXRSZXN1bHQu
c2Vjb25kLCBtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgICAgIHN0YXRpc3RpY3NX
ZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNSZWRpcmVj
dCAmJiAhYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc0Fzc29jaWF0ZWQpIHsKKyAgICAgICAgaWYg
KGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nT3JpZ2luUmVzdWx0
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3VyY2VQcmltYXJ5
RG9tYWluKTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb0V4aXN0cy5nZXQoKSwgcmVkaXJlY3RpbmdPcmlnaW5SZXN1bHQuc2Vj
b25kLCB0YXJnZXRQcmltYXJ5RG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uZ2V0KCksIHJlZGlyZWN0
aW5nT3JpZ2luUmVzdWx0LnNlY29uZCwgdGFyZ2V0UHJpbWFyeURvbWFpbik7CisgICAgICAgICAg
ICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQ
cmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlEb21haW4pOworICAgICAgICAgICAgaWYgKCFyZWxh
dGlvbnNoaXBFeGlzdHMobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMuZ2V0KCks
IHRhcmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZVByaW1hcnlEb21haW4pKSB7CisgICAgICAgICAg
ICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tLmdldCgpLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VQcmltYXJ5RG9tYWluKTsKKyAg
ICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ09yaWdpblJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc291cmNlUHJp
bWFyeURvbWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMuZ2V0KCksIHJlZGlyZWN0aW5nT3JpZ2luUmVz
dWx0LnNlY29uZCwgdGFyZ2V0UHJpbWFyeURvbWFpbikpIHsKKyAgICAgICAgICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldCgp
LCByZWRpcmVjdGluZ09yaWdpblJlc3VsdC5zZWNvbmQsIHRhcmdldFByaW1hcnlEb21haW4pOwor
ICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgICAg
IGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
RXhpc3RzLmdldCgpLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VQcmltYXJ5RG9tYWluKSkg
eworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291cmNlUHJp
bWFyeURvbWFpbik7CisgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGF0aXN0aWNz
V2VyZVVwZGF0ZWQpCisgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURv
bWFpbiwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVQcmltYXJ5RG9tYWluLCBXYWxsVGltZSBsYXN0
U2VlbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0YXJnZXRQcmlt
YXJ5RG9tYWluKTsKKyAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXRQcmltYXJ5RG9tYWluLCBsYXN0
U2Vlbik7CisKKyAgICBhdXRvIHRhcmdldERvbWFpbklEID0gcmVzdWx0LnNlY29uZDsKKyAgICBp
ZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbkV4
aXN0cy5nZXQoKSwgdGFyZ2V0RG9tYWluSUQsIG1haW5GcmFtZVByaW1hcnlEb21haW4pKSB7Cisg
ICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuZ2V0KCksIHRhcmdldERvbWFpbklELCBtYWluRnJhbWVQcmltYXJ5RG9tYWluKTsK
KyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgp
OworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1hcnlEb21haW4s
IGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc291cmNlRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihzb3VyY2VQcmltYXJ5RG9tYWluKTsKKyAg
ICBhdXRvIHRhcmdldERvbWFpblJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclBy
aW1hcnlEb21haW4odGFyZ2V0UHJpbWFyeURvbWFpbik7CisKKyAgICBib29sIGlzTmV3UmVkaXJl
Y3RUb0VudHJ5ID0gZmFsc2U7CisgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLmdldCgpLCBzb3VyY2VEb21haW5SZXN1bHQuc2Vj
b25kLCB0YXJnZXRQcmltYXJ5RG9tYWluKSkgeworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldCgpLCBzb3VyY2VEb21haW5S
ZXN1bHQuc2Vjb25kLCB0YXJnZXRQcmltYXJ5RG9tYWluKTsKKyAgICAgICAgaXNOZXdSZWRpcmVj
dFRvRW50cnkgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNOZXdSZWRpcmVjdEZyb21FbnRy
eSA9IGZhbHNlOworICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tRXhpc3RzLmdldCgpLCB0YXJnZXREb21haW5SZXN1bHQuc2Vjb25kLCBz
b3VyY2VQcmltYXJ5RG9tYWluKSkgeworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAo
bV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZ2V0KCksIHRhcmdldERvbWFpblJlc3Vs
dC5zZWNvbmQsIHNvdXJjZVByaW1hcnlEb21haW4pOworICAgICAgICBpc05ld1JlZGlyZWN0RnJv
bUVudHJ5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNOZXdSZWRpcmVjdFRvRW50cnkgfHwg
aXNOZXdSZWRpcmVjdEZyb21FbnRyeSkKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vz
c2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5
RG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVy
YWN0aW9uKQoreworICAgIGlmIChtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQt
PmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICB8fCBtX21vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPmJpbmREb3VibGUoMiwgbW9zdFJlY2VudEludGVyYWN0
aW9uLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+YmluZFRleHQoMywgcHJpbWFy
eURvbWFpbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09D
T0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24sIGVycm9yIG1lc3Nh
Z2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5k
aWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1
bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbik7CisgICAgc2V0VXNlcklu
dGVyYWN0aW9uKHByaW1hcnlEb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzZXRVc2VySW50ZXJh
Y3Rpb24ocHJpbWFyeURvbWFpbiwgZmFsc2UsIHsgfSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
cmVtb3ZlU3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJERUxFVEUg
RlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMgV0hFUkUgZG9tYWluSUQgPSAi
LCBTdHJpbmc6Om51bWJlcih0YXJnZXRSZXN1bHQuc2Vjb25kKSkpOworICAgIGlmIChyZW1vdmVT
dG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlU3Rv
cmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRl
cmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIHByaW1hcnlEb21haW4pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2hh
ZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX3VwZGF0ZVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31z
IiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ym9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDApID8gdHJ1ZSA6IGZhbHNlOworICAgIGlmICghaGFkVXNlckludGVyYWN0
aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2FsbFRpbWUgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMobV9oYWRVc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQtPmdldENvbHVtbkRvdWJsZSgxKSk7CisKKyAgICBpZiAoaGFz
U3RhdGlzdGljc0V4cGlyZWQobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpKSB7CisgICAg
ICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBu
ZWVkIGl0LgorICAgICAgICAvLyBTZXQgdGltZXN0YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNz
IG1lcmdlIHdpbGwga25vdworICAgICAgICAvLyBpdCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2Vk
IHRvIGl0cyBkZWZhdWx0IC0xLgorICAgICAgICBjbGVhclVzZXJJbnRlcmFjdGlvbihwcmltYXJ5
RG9tYWluKTsKKyAgICAgICAgaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiBoYWRVc2VySW50ZXJhY3Rpb247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmlu
ZyYgcHJpbWFyeURvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIHBy
aW1hcnlEb21haW4pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IG1f
dXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VO
VVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIGlmIChu
ZXdQcmV2YWxlbmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKSB7CisgICAg
ICAgIGlmIChtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+YmluZEludCgx
LCAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBwcmltYXJ5RG9tYWluKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWls
ZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzZXRS
ZXN1bHQgPSBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+cmVzZXQoKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRF
X09LKTsKKyAgICB9CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+IG5vblByZXZhbGVudFJlZGlyZWN0
aW9uU291cmNlczsKKyAgICBhdXRvIHByaW1hcnlEb21haW5JRCA9IGRvbWFpbklERnJvbVN0cmlu
ZyhwcmltYXJ5RG9tYWluKTsKKyAgICByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5z
VGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4ocHJpbWFyeURvbWFpbklELCBub25QcmV2YWxlbnRS
ZWRpcmVjdGlvblNvdXJjZXMsIDApOworICAgIHNldERvbWFpbnNBc1ByZXZhbGVudChXVEZNb3Zl
KG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcykpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVu
c2lnbmVkPiYmIGRvbWFpbnMpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudChtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlz
dChkb21haW5zKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisK
K1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZHVtcFJlc291cmNl
TG9hZFN0YXRpc3RpY3MoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBTdG9yYWdlQWNlc3NzCisgICAgQVNTRVJUKDAp
OworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNh
dGVWYWx1ZUZvckRvbWFpbihXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHByZWRpY2F0ZVN0YXRl
bWVudCwgY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIGlmIChwcmVkaWNhdGVTdGF0ZW1lbnQuYmlu
ZFRleHQoMSwgcHJpbWFyeURvbWFpbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHByZWRpY2F0
ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluIGZhaWxlZCB0byBi
aW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgY29uc3RfY2FzdDxXZWJDb3Jl
OjpTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLmxhc3RFcnJvck1zZygpKTsKKyNl
bmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGJvb2wgcmVzdWx0ID0gcHJlZGljYXRlU3RhdGVtZW50LmdldENvbHVt
bkludCgwKSA/IHRydWUgOiBmYWxzZTsKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBwcmVkaWNhdGVT
dGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJl
c3VsdCA9PSBTUUxJVEVfT0spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
U3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudC5nZXQoKSwgcHJpbWFyeURvbWFpbik7Cit9CisKK2Jvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNl
KGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihtX2lz
VmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmdldCgpLCBwcmltYXJ5RG9tYWluKTsKK30K
KworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN0cmluZyYgc3VicmVzb3VyY2VQcmltYXJ5RG9tYWlu
LCBjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZmlyc3REb21haW5JRCA9IGRvbWFp
bklERnJvbVN0cmluZyhzdWJyZXNvdXJjZVByaW1hcnlEb21haW4pOworICAgIHJldHVybiByZWxh
dGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5FeGlzdHMuZ2V0
KCksIGZpcnN0RG9tYWluSUQsIHRvcEZyYW1lUHJpbWFyeURvbWFpbik7Cit9CisKK2Jvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVV
bmRlcihjb25zdCBTdHJpbmcmIHN1YmZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0
b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIGZpcnN0RG9tYWluSUQgPSBkb21haW5JREZyb21TdHJpbmcoc3Vi
ZnJhbWVQcmltYXJ5RG9tYWluKTsKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1fc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLmdldCgpLCBmaXJzdERvbWFpbklELCB0b3BG
cmFtZVByaW1hcnlEb21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgU3RyaW5nJiBob3N0
UmVkaXJlY3RlZEZyb21QcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIGhvc3RSZWRpcmVjdGVk
VG9QcmltYXJ5RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYXV0byBmaXJzdERvbWFpbklEID0gZG9tYWluSURGcm9tU3RyaW5nKGhvc3RSZWRp
cmVjdGVkRnJvbVByaW1hcnlEb21haW4pOworICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlzdHMo
bV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLmdldCgpLCBmaXJzdERvbWFpbklE
LCBob3N0UmVkaXJlY3RlZFRvUHJpbWFyeURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3Ry
aW5nJiBwcmltYXJ5RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5RG9t
YWluKTsKKyAgICAKKyAgICBpZiAobV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBwcmltYXJ5RG9tYWluKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9jbGVh
clByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVz
b3VyY2UsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBjb25zdF9jYXN0PFdlYkNv
cmU6OlNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSkubGFzdEVycm9yTXNnKCkpOwor
I2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNl
dFJlc3VsdCA9PSBTUUxJVEVfT0spOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFp
biwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbik7
CisgICAgCisgICAgaWYgKG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC0+YmluZEludCgx
LCB2YWx1ZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0
YXRlbWVudC0+YmluZFRleHQoMSwgcHJpbWFyeURvbWFpbikgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZh
dGhlcmVkIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywg
Y29uc3RfY2FzdDxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLmxh
c3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0
ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNl
dFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKworYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYg
cHJpbWFyeURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihtX2lzR3JhbmRmYXRoZXJlZFN0
YXRlbWVudC5nZXQoKSwgcHJpbWFyeURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25z
dCBTdHJpbmcmIHByaW1hcnlTdWJGcmFtZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5VG9w
RnJhbWVEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJp
bWFyeVN1YkZyYW1lRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJl
IHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWlu
LgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVRv
cEZyYW1lRG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnMuZ2V0KCksIHJlc3VsdC5zZWNvbmQsIHByaW1hcnlUb3BGcmFt
ZURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlT
dWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5VG9wRnJhbWVEb21haW4pCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YnJlc291cmNl
RG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2
ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVRvcEZyYW1lRG9tYWlu
KTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnMuZ2V0KCksIHJlc3VsdC5zZWNvbmQsIHByaW1hcnlUb3BGcmFtZURvbWFpbik7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURv
bWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFyeVN1YnJlc291cmNlRG9tYWluKTsKKwor
ICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3Rp
Y3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUHJpbWFyeURvbWFpbihwcmltYXJ5UmVkaXJlY3REb21haW4pOworCisgICAgVU5V
U0VEX1BBUkFNKHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgCisgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgcmVzdWx0
LnNlY29uZCwgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20o
Y29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJp
bWFyeVJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ks
IG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJl
Y3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
cHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcCht
X3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgcmVzdWx0LnNlY29uZCwgcHJp
bWFyeVJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9w
RnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0b3BGcmFtZVByaW1hcnlE
b21haW4pOworCisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZl
IGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHByaW1hcnlSZWRpcmVjdERvbWFpbik7
CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvLmdldCgpLCByZXN1bHQuc2Vjb25kLCBwcmltYXJ5UmVkaXJlY3REb21haW4pOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clByaW1hcnlEb21haW4odG9wRnJhbWVQcmltYXJ5RG9tYWluKTsKKworICAgIC8vIEZvciBjb25z
aXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRo
ZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFy
eURvbWFpbihwcmltYXJ5UmVkaXJlY3REb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmdldCgpLCByZXN1bHQuc2Vjb25k
LCBwcmltYXJ5UmVkaXJlY3REb21haW4pOworfQorCitzdGQ6OnBhaXI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCB1bnNpZ25lZD4gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50
LT5iaW5kVGV4dCgxLCBwcmltYXJ5RG9tYWluKSAhPSBTUUxJVEVfT0spIHsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7
IEFkZGVkUmVjb3JkOjpObywgMCB9OworICAgIH0KKyAgICAKKyAgICBpZiAobV9kb21haW5JREZy
b21TdHJpbmdTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHVuc2ln
bmVkIGRvbWFpbklEID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPmdldENvbHVtbklu
dCgwKTsKKworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0
YXRlbWVudC0+cmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVz
ZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5v
LCBkb21haW5JRCB9OworICAgIH0KKworICAgIGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURG
cm9tU3RyaW5nU3RhdGVtZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1
bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIG5ld09ic2VydmF0aW9uKHByaW1hcnlEb21haW4pOworICAgIGluc2VydE9ic2VydmVkRG9t
YWluKG5ld09ic2VydmF0aW9uKTsKKworICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpZZXMsIGRv
bWFpbklERnJvbVN0cmluZyhwcmltYXJ5RG9tYWluKSB9OworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOworICAgIG1fb3BlcmF0aW5n
RGF0ZXMuY2xlYXIoKTsKKworICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAgcmVt
b3ZlQWxsU3RvcmFnZUFjY2VzcyhbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdh
dG9yLmNvcHlSZWYoKV0geyB9KTsKKworICAgIGF1dG8gcHJpbWFyeURvbWFpbnNUb0Jsb2NrID0g
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgdXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKHByaW1hcnlEb21haW5zVG9CbG9jaywgW2NhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7Cit9CisKK1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpDb29raWVUcmVhdG1lbnRSZXN1bHQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihj
b25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0Cit7CisgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSks
IG1ha2VTdHJpbmcoIlNFTEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIGhpZ2hMZXZlbERvbWFpbiA9IDEiLCBwcmltYXJ5RG9tYWlu
KSk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXR1cm4gQ29va2ll
VHJlYXRtZW50UmVzdWx0OjpBbGxvdzsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ByZXZhbGVu
dCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7CisgICAgaWYgKCFp
c1ByZXZhbGVudCkKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c7
CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MSkgPyB0cnVlIDogZmFsc2U7CisgICAgcmV0dXJuIGhhZFVzZXJJbnRlcmFjdGlvbiA/IENvb2tp
ZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwIDogQ29va2llVHJlYXRtZW50UmVzdWx0OjpC
bG9ja0FuZFB1cmdlOworfQorICAgIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBzdGF0aXN0aWMsIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0
eVByaW1hcnlEb21haW4pCit7CisgICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnMoZmlyc3RQYXJ0eVByaW1hcnlEb21haW4pOworfQor
CitWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9t
YWluc1RvQmxvY2soKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0czsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVt
ZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKSwgIlNFTEVD
VCBoaWdoTGV2ZWxEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQg
PSAxIl9zKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
ICAgIHJldHVybiByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09
IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1bW5U
ZXh0KDApKTsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zVG9CbG9jayA9IHRoaXMt
PmRvbWFpbnNUb0Jsb2NrKCk7CisKKyAgICBpZiAoZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICYmICFkb21haW5zVG9CbG9jay5pc0VtcHR5
KCkpCisgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2siLCBkb21haW5zVG9C
bG9jayk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2NrID0g
Y3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxs
VXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9C
bG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlID0gc3RvcmUuY29weVJl
ZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3
ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBjb29raWUgYmxvY2tp
bmcuIik7CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRD
b3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFs
ZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3N0b3Jl
ID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1
ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHko
ZG9tYWlucyldIHsKKyAgICAgICAgc3RvcmUtPmNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihkb21h
aW5zKTsKKyAgICB9KTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1
bmN0aW9uKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
Zm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZh
bHVlcygpKQorICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOworfQor
CitWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OlByZXZhbGVudERv
bWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmV2YWxlbnRE
b21haW5zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAK
KyAgICBWZWN0b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcmVzdWx0czsKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdl
dCgpKSwgIlNFTEVDVCBkb21haW5JRCwgaGlnaExldmVsRG9tYWluLCBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAK
KyAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCkpCisgICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpCisgICAgICAg
ICAgICAsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91Ymxl
KDIpKQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZh
bHNlCisgICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFs
c2UKKyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCitW
ZWN0b3I8dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5k
RXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiByZXN1bHRzOworICAgIE9wdGlvbmFs
PFNlY29uZHM+IGV4cGlyYXRpb25EYXRlVGltZSA9IHN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCk7
CisgICAgaWYgKCFleHBpcmF0aW9uRGF0ZVRpbWUpCisgICAgICAgIHJldHVybiByZXN1bHRzOwor
CisgICAgYXV0byYgc3RhdGVtZW50ID0gY29uc3RfY2FzdDxTUUxpdGVTdGF0ZW1lbnQmPihtX2Zp
bmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmdldCgpKTsKKyAgICBpZiAoc3RhdGVt
ZW50LmJpbmREb3VibGUoMSwgZXhwaXJhdGlvbkRhdGVUaW1lLnZhbHVlKCkudmFsdWUoKSkgIT0g
U1FMSVRFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgIHdoaWxlIChzdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOworICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRVc2VySW50
ZXJhY3Rpb25zKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1
dG8gZXhwaXJlZFJlY29yZHMgPSBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICBp
ZiAoZXhwaXJlZFJlY29yZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGV4cGlyZWRSZWNvcmRJRHMgPSBsaXN0VG9TdHJpbmcoZXhwaXJlZFJlY29yZHMpOworCisgICAg
U1FMaXRlU3RhdGVtZW50IGNsZWFyRXhwaXJlZEludGVyYWN0aW9uKG1fZGF0YWJhc2UuZ2V0KCks
IG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lID0gMCwgaGFkVXNlckludGVyYWN0aW9uID0gMSBXSEVSRSBkb21haW5JRCBJ
TiAoIiwgZXhwaXJlZFJlY29yZElEcywgIikiKSk7CisgICAgaWYgKGNsZWFyRXhwaXJlZEludGVy
YWN0aW9uLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsKKworICAgIFNR
TGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VT
dHJpbmcoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucyAiLCBl
eHBpcmVkUmVjb3JkSURzLCAiKSIpKTsKKyAgICBpZiAocmVtb3ZlU3RvcmFnZUFjY2Vzcy5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2xlYXJFeHBp
cmVkSW50ZXJhY3Rpb24uc3RlcCgpICE9IFNRTElURV9ET05FCisgICAgICAgIHx8IHJlbW92ZVN0
b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQs
IGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JN
c2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0
aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4mJiBkb21haW5JRHNUb0NsZWFyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbklEc1RvQ2xlYXIuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyR3Jh
bmRmYXRoZXJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZS5nZXQoKSwgbWFrZVN0cmluZygiVVBEQVRF
IE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDAgV0hFUkUgZG9tYWluSUQgSU4g
KCIsIGxpc3RUb1N0cmluZyhkb21haW5JRHNUb0NsZWFyKSwgIikiKSk7CisgICAgaWYgKGNsZWFy
R3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxTdHJpbmc+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0g
bV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJv
b2wgc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVy
aW5nICYmIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKKworICAgIGlmIChzaG91bGRD
bGVhckdyYW5kZmF0aGVyaW5nKQorICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3Rh
bXAgPSB7IH07CisKKyAgICBjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCk7CisgICAgCisg
ICAgVmVjdG9yPFN0cmluZz4gcHJldmFsZW50UmVzb3VyY2VzOworCisgICAgVmVjdG9yPFByZXZh
bGVudERvbWFpbkRhdGE+IHByZXZhbGVudERvbWFpbnMgPSB0aGlzLT5wcmV2YWxlbnREb21haW5z
KCk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBkb21haW5zVG9DbGVhckdyYW5kZmF0aGVyaW5nOwor
ICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogcHJldmFsZW50RG9tYWlucykgeworICAgICAgICBp
ZiAoIXN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gJiYgKCFzaG91bGRDaGVja0ZvckdyYW5k
ZmF0aGVyaW5nIHx8ICFzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgICAgICBwcmV2
YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHN0YXRpc3RpYy5wcmltYXJ5RG9tYWluKTsKKworICAgICAg
ICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJl
ZCkKKyAgICAgICAgICAgIGRvbWFpbnNUb0NsZWFyR3JhbmRmYXRoZXJpbmcuYXBwZW5kKHN0YXRp
c3RpYy5kb21haW5JRCk7CisgICAgfQorCisgICAgY2xlYXJHcmFuZGZhdGhlcmluZyhXVEZNb3Zl
KGRvbWFpbnNUb0NsZWFyR3JhbmRmYXRoZXJpbmcpKTsKKyAgICAKKyAgICByZXR1cm4gcHJldmFs
ZW50UmVzb3VyY2VzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIDw9IG1f
cGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
QVNTRVJUKG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8gPD0gbV9wYXJhbWV0ZXJzLm1h
eFN0YXRpc3RpY3NFbnRyaWVzKTsKKworICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9Q
cnVuZSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSAtIG1fcGFyYW1ldGVycy5wcnVu
ZUVudHJpZXNEb3duVG87CisgICAgQVNTRVJUKG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsK
KworICAgIC8vIEZJWE1FKFdJUCk6IEltcGxlbWVudCB2aWEgZGF0YWJhc2UKKyAgICBBU1NFUlQo
MCk7CisgICAgLyoKKyAgICBWZWN0b3I8ZGJfU3RhdGlzdGljc0xhc3RTZWVuPiByZXNvdXJjZXNU
b1BydW5lUGVySW1wb3J0YW5jZVttYXhJbXBvcnRhbmNlICsgMV07CisgICAgZm9yIChhdXRvJiBy
ZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAg
ICAgICByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVtjb21wdXRlSW1wb3J0YW5jZShyZXNv
dXJjZVN0YXRpc3RpYyldLmFwcGVuZCh7IHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFp
biwgcmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGlt
cG9ydGFuY2UgPSAwOyBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSAmJiBpbXBvcnRhbmNlIDw9
IG1heEltcG9ydGFuY2U7ICsraW1wb3J0YW5jZSkKKyAgICAgICAgcHJ1bmVSZXNvdXJjZXMobV9y
ZXNvdXJjZVN0YXRpc3RpY3NNYXAsIHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW2ltcG9y
dGFuY2VdLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CisgICAgKi8KKyAgICBBU1NFUlQo
IW51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlTGFzdFNlZW4oY29uc3QgU3RyaW5nJiBkb21haW4s
IFdhbGxUaW1lIGxhc3RTZWVuKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgaWYgKG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgbGFzdFNl
ZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRh
dGVMYXN0U2VlbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRo
aXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVz
ZXRSZXN1bHQgPSBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LT5yZXNldCgpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0
IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJp
bWFyeURvbWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICB1cGRhdGVMYXN0U2VlbihwcmltYXJ5RG9t
YWluLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURv
bWFpbihwcmltYXJ5RG9tYWluKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9t
YWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFN0cmluZyYgcHJpbWFyeURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4ocHJpbWFy
eURvbWFpbik7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbiwgUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW3N0
b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NR
dWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY3ZjI3YjYwNzRhNTUzYzkyODMxNDVm
OWEyMmZhMGE2MjA1MjA3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5o
CkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0
ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgU1FMaXRlRGF0YWJhc2U7CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7CitzdHJ1Y3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKKworLy8gVGhpcyBpcyBhbHdheXMgY29u
c3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUgOiBwdWJsaWMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHsKK3B1
YmxpYzoKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZShXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VE
aXJlY3RvcnlQYXRoKTsKKworICAgIHZvaWQgcG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJik7CisKKyAgICB2b2lkIGNsZWFyKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IC8qbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgp
OyovIH0KKworICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JikgY29uc3Q7CisKKyAgICB2
b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OworICAgIHZvaWQgY2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKworICAgIHZvaWQg
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9y
YWdlSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSW1tZWRpYXRlbHko
KSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihT
dHJpbmcmJiBwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBvcGVu
ZXJQYWdlSUQsIFN0cmluZyYmIG9wZW5lclByaW1hcnlEb21haW4pIG92ZXJyaWRlOworICAgIHZv
aWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
CisgICAgdm9pZCBncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
Y29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdG9w
RnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgY29u
c3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0
ZWRGcm9tUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRvUHJpbWFy
eURvbWFpbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBi
b29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJp
bmcmIHByaW1hcnlEb21haW4pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4s
IGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1lRG9tYWluKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlT
dWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5VG9wRnJhbWVEb21haW4pIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0
cmluZyYgcHJpbWFyeVN1YnJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRp
cmVjdERvbWFpbikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3Ry
aW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBj
b25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFy
eURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pIG92ZXJyaWRlOwor
CisgICAgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFy
eURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIE9wdGlvbmFsPHVp
bnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3RyaW5n
JiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcmJiB0b3BGcmFtZVByaW1hcnlEb21haW4s
IHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSBvdmVycmlkZTsK
KyAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmlu
ZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29s
IHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBTdHJpbmcmIHRhcmdl
dFByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiwgY29u
c3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRhcmdldEhvc3Qs
IGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lSG9zdCwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFp
bkZyYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJp
bmcmIHByaW1hcnlEb21haW4pIG92ZXJyaWRlOworICAgIHZvaWQgbG9nU3VicmVzb3VyY2VMb2Fk
aW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBtYWlu
RnJhbWVQcmltYXJ5RG9tYWluLCBXYWxsVGltZSBsYXN0U2Vlbikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFN0cmluZyYgc291cmNlUHJpbWFyeURvbWFp
biwgY29uc3QgU3RyaW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluKSBvdmVycmlkZTsKKworICAgIHZv
aWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBvdmVy
cmlkZTsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1h
cnlEb21haW4pIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBTdHJpbmcm
IHByaW1hcnlEb21haW4sIFNlY29uZHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGJvb2wg
ZGF0YWJhc2VJc0VtcHR5KCkgY29uc3Q7CisgICAgYm9vbCBpbnNlcnRPYnNlcnZlZERvbWFpbihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
KTsKKyAgICBib29sIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQmLCB1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZURvbWFpbik7
CisgICAgYm9vbCByZWxhdGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Jiwg
dW5zaWduZWQgZmlyc3REb21haW5JRCwgY29uc3QgU3RyaW5nJiBzZWNvbmREb21haW4pIGNvbnN0
OworICAgIHVuc2lnbmVkIGRvbWFpbklERnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKSBjb25zdDsK
KyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGNvbnN0
IFN0cmluZyYpIGNvbnN0OworI2VuZGlmCisgICAgdm9pZCB1cGRhdGVMYXN0U2Vlbihjb25zdCBT
dHJpbmcmIGRvbWFpbiwgV2FsbFRpbWUpOworICAgIHZvaWQgdXBkYXRlTW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgV2FsbFRpbWUpOworICAgIHZvaWQgc2V0
VXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBkb21haW5zVG9CbG9j
aygpIGNvbnN0OworCisgICAgc3RydWN0IFByZXZhbGVudERvbWFpbkRhdGEgeworICAgICAgICB1
bnNpZ25lZCBkb21haW5JRDsKKyAgICAgICAgU3RyaW5nIHByaW1hcnlEb21haW47CisgICAgICAg
IFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lOworICAgICAgICBib29sIGhh
ZFVzZXJJbnRlcmFjdGlvbjsKKyAgICAgICAgYm9vbCBncmFuZGZhdGhlcmVkOworICAgIH07Cisg
ICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRhdGE+IHByZXZhbGVudERvbWFpbnMoKSBjb25zdDsK
KyAgICBWZWN0b3I8dW5zaWduZWQ+IGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9ucygpIGNvbnN0
OworICAgIHZvaWQgY2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9ucygpOworICAgIHZvaWQgY2xl
YXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYpOworICAgIHZvaWQgaW5jcmVtZW50
UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxTdHJpbmc+Jikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsKKyAgICBzdHJ1Y3QgTm90
VmVyeVByZXZhbGVudFJlc291cmNlcyB7CisgICAgICAgIFN0cmluZyBwcmltYXJ5RG9tYWluOwor
ICAgICAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIHByZXZhbGVuY2U7CisgICAgICAgIHVuc2ln
bmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudDsKKyAgICAgICAgdW5zaWdu
ZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50OworICAgICAgICB1bnNpZ25lZCBz
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKKyAgICB9OworICAgIEhhc2hNYXA8dW5zaWduZWQs
IE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
KCk7CisKKyAgICBib29sIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudCYsIGNvbnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBDb29raWVU
cmVhdG1lbnRSZXN1bHQgeyBBbGxvdywgQmxvY2tBbmRLZWVwLCBCbG9ja0FuZFB1cmdlIH07Cisg
ICAgQ29va2llVHJlYXRtZW50UmVzdWx0IGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihjb25zdCBT
dHJpbmcmKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBoYXNVc2VyR3JhbnRlZFN0b3Jh
Z2VBY2Nlc3NUaHJvdWdoUHJvbXB0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlQcmltYXJ5RG9tYWluKTsKKyAgICB2b2lkIHNl
dFByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgUmVzb3VyY2VM
b2FkUHJldmFsZW5jZSk7CisgICAgdW5zaWduZWQgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50
RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5J
RCwgU3RkU2V0PHVuc2lnbmVkPiYgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNp
Z25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKyAgICB2b2lkIHNldERvbWFpbnNBc1ByZXZh
bGVudChTdGRTZXQ8dW5zaWduZWQ+JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50
ZXJuYWwoU3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIE9wdGlv
bmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21w
dGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2
b2lkIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgVmVj
dG9yPFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICBl
bnVtIGNsYXNzIEFkZGVkUmVjb3JkIHsgTm8sIFllcyB9OworICAgIHN0ZDo6cGFpcjxBZGRlZFJl
Y29yZCwgdW5zaWduZWQ+IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4o
Y29uc3QgU3RyaW5nJik7CisgICAgVmVjdG9yPFN0cmluZz4gdG9wUHJpdmF0ZWx5Q29udHJvbGxl
ZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGNy
ZWF0ZVNjaGVtYSgpOworICAgIGJvb2wgcHJlcGFyZVN0YXRlbWVudHMoKTsKKyAgICAKKyAgICBj
b25zdCBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKKyAgICBIYXNoTWFwPFN0cmluZywg
V2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7
CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBtX2RhdGFiYXNlOworICAg
IFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0T2JzZXJ2ZWREb21h
aW5TdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9p
bnNlcnRUb3BMZXZlbERvbWFpblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50OworICAg
IFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVPcmlnaW5zU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICBtdXRhYmxlIFVuaXF1
ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0V4aXN0czsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzRnJvbTsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzOworICAg
IFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luczsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzOworICAgIFVuaXF1ZVJlZjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lu
czsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzOworICAgIFVuaXF1ZVJlZjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICBt
dXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PiBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbTsKKyAgICBtdXRhYmxlIFVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNGcm9tRXhpc3RzOworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50OworICAgIFVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlUHJldmFsZW50UmVzb3Vy
Y2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50PiBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQ7CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lz
VmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBV
bmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUhhZFVzZXJJbnRlcmFj
dGlvblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlTW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWVTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91
cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50OworICAgIG11dGFibGUgVW5pcXVlUmVmPFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7CisgICAgVW5p
cXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVEYXRhUmVjb3Jkc1JlbW92
ZWRTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91
cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZW1l
bnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVUaW1l
c0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJU3RhdGVtZW50OworICAg
IFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZmluZEV4cGlyZWRVc2VySW50
ZXJhY3Rpb25TdGF0ZW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3Bw
CmluZGV4IDdlZTJhZDEwMTAwYjk0MThhY2EwZDA5NDhmNzZjODBjNGZlNDhmNTkuLmQ1NzA0ZDM2
OTY3OTU5MWU5ZjdiMzM2ZGQ0ZDllZmNmZWJmYTljYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCkBAIC00OSw5NSArNDksNiBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBjb25zdGV4cHIg
dW5zaWduZWQgc3RhdGlzdGljc01vZGVsVmVyc2lvbiB7IDE0IH07Ci1jb25zdGV4cHIgdW5zaWdu
ZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9Owot
Y29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1
X3MgfTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1j
b25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKLXN0YXRpYyBjb25zdCBjaGFy
KiBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIHsgIjNyZHBhcnR5dGVzdHdlYmtpdC5vcmci
IH07Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLXN0YXRpYyBTdHJpbmcgZG9tYWluc1Rv
U3RyaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKQotewotICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcjsKLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAg
aWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiLCAiKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZG9tYWluKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLSNlbmRpZgotCi1jbGFzcyBPcGVyYXRpbmdEYXRl
IHsKLXB1YmxpYzoKLSAgICBPcGVyYXRpbmdEYXRlKCkgPSBkZWZhdWx0OwotCi0gICAgc3RhdGlj
IE9wZXJhdGluZ0RhdGUgZnJvbVdhbGxUaW1lKFdhbGxUaW1lIHRpbWUpCi0gICAgewotICAgICAg
ICBkb3VibGUgbXMgPSB0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRzKCk7Ci0g
ICAgICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOwotICAgICAgICBpbnQgeWVhckRheSA9IGRh
eUluWWVhcihtcywgeWVhcik7Ci0gICAgICAgIGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVh
cih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLSAgICAgICAgaW50IG1vbnRoRGF5ID0gZGF5
SW5Nb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7Ci0KLSAgICAg
ICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwgbW9udGhEYXkgfTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSB0b2RheSgpCi0gICAgewotICAgICAgICByZXR1
cm4gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpub3coKSk7Ci0gICAgfQot
Ci0gICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9u
dGhEYXkpICogc2Vjb25kc1BlckRheSB9OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X21vbnRoRGF5ID09IG90aGVyLm1fbW9udGhEYXkgJiYgbV9tb250aCA9PSBvdGhlci5tX21vbnRo
ICYmIG1feWVhciA9PSBvdGhlci5tX3llYXI7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
c2Vjb25kc1NpbmNlRXBvY2goKSA8IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Ci0gICAgfQot
Ci0gICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIuc2Vjb25k
c1NpbmNlRXBvY2goKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgT3BlcmF0aW5nRGF0ZShpbnQg
eWVhciwgaW50IG1vbnRoLCBpbnQgbW9udGhEYXkpCi0gICAgICAgIDogbV95ZWFyKHllYXIpCi0g
ICAgICAgICwgbV9tb250aChtb250aCkKLSAgICAgICAgLCBtX21vbnRoRGF5KG1vbnRoRGF5KQot
ICAgIHsgfQotCi0gICAgaW50IG1feWVhciB7IDAgfTsKLSAgICBpbnQgbV9tb250aCB7IDAgfTsg
Ly8gWzAsIDExXS4KLSAgICBpbnQgbV9tb250aERheSB7IDAgfTsgLy8gWzEsIDMxXS4KLX07Ci0K
LXN0YXRpYyBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBW
ZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIGV4aXN0aW5nRGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRl
PiYmIG5ld0RhdGVzKQotewotICAgIGlmIChleGlzdGluZ0RhdGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIFdURk1vdmUobmV3RGF0ZXMpOwotCi0gICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+
IG1lcmdlZERhdGVzKGV4aXN0aW5nRGF0ZXMuc2l6ZSgpICsgbmV3RGF0ZXMuc2l6ZSgpKTsKLQot
ICAgIC8vIE1lcmdlIHRoZSB0d28gc29ydGVkIHZlY3RvcnMgb2YgZGF0ZXMuCi0gICAgc3RkOjpt
ZXJnZShleGlzdGluZ0RhdGVzLmJlZ2luKCksIGV4aXN0aW5nRGF0ZXMuZW5kKCksIG5ld0RhdGVz
LmJlZ2luKCksIG5ld0RhdGVzLmVuZCgpLCBtZXJnZWREYXRlcy5iZWdpbigpKTsKLSAgICAvLyBS
ZW1vdmUgZHVwbGljYXRlIGRhdGVzLgotICAgIHJlbW92ZVJlcGVhdGVkRWxlbWVudHMobWVyZ2Vk
RGF0ZXMpOwotCi0gICAgLy8gRHJvcCBvbGQgZGF0ZXMgdW50aWwgdGhlIFZlY3RvciBzaXplIHJl
YWNoZXMgb3BlcmF0aW5nRGF0ZXNXaW5kb3cuCi0gICAgd2hpbGUgKG1lcmdlZERhdGVzLnNpemUo
KSA+IG9wZXJhdGluZ0RhdGVzV2luZG93KQotICAgICAgICBtZXJnZWREYXRlcy5yZW1vdmUoMCk7
Ci0KLSAgICByZXR1cm4gbWVyZ2VkRGF0ZXM7Ci19CiAKIHN0cnVjdCBTdGF0aXN0aWNzTGFzdFNl
ZW4gewogICAgIFN0cmluZyB0b3BQcml2YXRlbHlPd25lZERvbWFpbjsKQEAgLTE1NiwyNiArNjcs
MTQgQEAgc3RhdGljIHZvaWQgcHJ1bmVSZXNvdXJjZXMoSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzdGEKICAgICAgICAgc3RhdGlzdGljc01hcC5yZW1v
dmUoc3RhdGlzdGljc1RvUHJ1bmVbaV0udG9wUHJpdmF0ZWx5T3duZWREb21haW4pOwogfQogCi1z
dGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCi17Ci0gICAgdW5zaWduZWQgaW1wb3J0YW5jZSA9IG1h
eEltcG9ydGFuY2U7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291
cmNlKQotICAgICAgICBpbXBvcnRhbmNlIC09IDE7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRpc3Rp
Yy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIGltcG9ydGFuY2UgLT0gMjsKLSAgICByZXR1
cm4gaW1wb3J0YW5jZTsKLX0KLQogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCi0gICAgOiBtX3N0b3JlKHN0b3Jl
KQotICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgIDogUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZWdpc3RlclVzZXJEZWZhdWx0c0lm
TmVlZGVkKCk7CiAjZW5kaWYKLSAgICBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vz
c2FyeSgpOwogCiAgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyldIHsKICAgICAgICAgaWYgKHdlYWtUaGlzKQpAQCAtMTgzLDEx
ICs4Miw2IEBAIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlKFdlYlJlc291cmNlCiAgICAgfSk7CiB9CiAKLVJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci19Ci0KIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQZXJzaXN0ZW50U3RvcmFnZShSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UmIHBlcnNpc3RlbnRTdG9yYWdlKQog
ewogICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBtYWtlV2Vha1B0cihwZXJzaXN0ZW50U3RvcmFn
ZSk7CkBAIC0yMDEsNzUgKzk1LDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdAogICAgICAgICBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKnRoaXMp
OwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRG
b3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWlucykKIHsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IHZhbHVlOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQotewot
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG1fcGFyYW1ldGVycy5zaG91bGRT
dWJtaXRUZWxlbWV0cnkgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlm
ICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgewotICAgICAgICBjYWxsYmFjaygpOwotICAg
ICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbiA6IGRv
bWFpbnMpIHsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUHJpbWFyeURvbWFpbihwcmV2YWxlbnRSZXNvdXJjZURvbWFpbik7CisgICAgICAgICsr
c3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKICAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5jbGVhcigpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigp
LnBsdWdpblByb2Nlc3NlcygpKQotICAgICAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5hZGQocGx1
Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gcHJldmFsZW50
UmVzb3VyY2VEb21haW5zID0gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNUb1JlbW92ZVdl
YnNpdGVEYXRhRm9yKCk7Ci0gICAgaWYgKHByZXZhbGVudFJlc291cmNlRG9tYWlucy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xv
Z2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byByZW1v
dmUgZGF0YSByZWNvcmRzIGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0cmluZyhwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOwotI2VuZGlmCi0KLSAgICBzZXREYXRh
UmVjb3Jkc0JlaW5nUmVtb3ZlZCh0cnVlKTsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KHByZXZhbGVudFJl
c291cmNlRG9tYWlucyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIoKnRoaXMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB3ZWFrVGhpcy0+bV9zdG9yZS5k
ZWxldGVXZWJzaXRlRGF0YUZvclRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zSW5BbGxQZXJz
aXN0ZW50RGF0YVN0b3JlcyhXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3Jl
ZERhdGFUeXBlcygpLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3Jr
UXVldWUuY29weVJlZigpXShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNXaXRoRGVsZXRl
ZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2go
W3RvcERvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURh
dGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vh
a1RoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbiA6IHRvcERvbWFpbnMpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byYgc3RhdGlzdGljID0gd2Vha1RoaXMtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1h
cnlEb21haW4ocHJldmFsZW50UmVzb3VyY2VEb21haW4pOwotICAgICAgICAgICAgICAgICAgICAr
K3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5zZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2lu
Z0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgcmVtb3ZpbmcgZGF0
YSByZWNvcmRzLiIpOwotI2VuZGlmCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7CiB9CiAKIHVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVj
dXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBIYXNo
U2V0PFN0cmluZz4mIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQgbnVtYmVy
T2ZSZWN1cnNpdmVDYWxscykgY29uc3QKQEAgLTMzNiw0NCArMTY3LDMxIEBAIGJvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKFJl
c291cmNlTG9hZFN0CiAgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLmhpZ2hMZXZlbERvbWFp
biA9PSBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIHx8IHJlc291cmNlU3RhdGlzdGljLmhp
Z2hMZXZlbERvbWFpbiA9PSBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzKCkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpj
bGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0
aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAg
aWYgKGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUocmVzb3VyY2VTdGF0aXN0aWMpKQotICAgICAg
ICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJj
ZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVN0
YXRpc3RpYy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICAgICAgICAgIG1hcmtB
c1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlzdGljKTsK
LSAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNlID0gcmVzb3VyY2VTdGF0aXN0
aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7Ci0gICAgICAgICAgICAgICAgYXV0byBuZXdQcmV2
YWxlbmNlID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNv
dXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKLSAg
ICAgICAgICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSBjdXJyZW50UHJldmFsZW5jZSkKLSAg
ICAgICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMs
IG5ld1ByZXZhbGVuY2UpOwotICAgICAgICAgICAgfQorICAgIGZvciAoYXV0byYgcmVzb3VyY2VT
dGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBp
ZiAoaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCisgICAgICAg
ICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICAgICAg
YXV0byBjdXJyZW50UHJldmFsZW5jZSA9IHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVz
b3VyY2UgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZTo6TG93OworICAgICAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3Vy
Y2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKKyAgICAgICAgICAgIGlmIChuZXdQcmV2
YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQorICAgICAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQcmV2YWxlbmNlKTsKICAgICAgICAgfQog
ICAgIH0KK30KIAotICAgIHJlbW92ZURhdGFSZWNvcmRzKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0gewotICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBwcnVu
ZVN0YXRpc3RpY3NJZk5lZWRlZCgpOwotICAgICAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkK
LSAgICAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0
b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlh
dGVXcml0ZTo6Tm8pOwotCi0gICAgICAgIGlmICghbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKV0gewotICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5bmNTdG9yYWdlSWZOZWVkZWQoKQor
eworICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAgICAgICBtX3BlcnNpc3RlbnRTdG9y
YWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVy
c2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKK30KIAotICAgICAgICAg
ICAgbV9zdG9yZS5ub3RpZnlSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc2VkKCk7Ci0gICAg
ICAgIH0pOwotICAgIH0pOwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKQoreworICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdl
KQorICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9y
ZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRl
V3JpdGU6Olllcyk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBj
b25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKQEAgLTUwMiwzMCArMzIwLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcm
JiBzdWJGCiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNhbGxiYWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkb21haW5z
KQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCksIHN0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT50b3BQcml2YXRlbHlDb250
cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0gKEhhc2hT
ZXQ8U3RyaW5nPiYmIHRvcERvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUgewotICAgICAg
ICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwg
dG9wRG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weSh0b3BEb21haW5zV2l0aFdlYnNpdGVEYXRhKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluIDogdG9wRG9tYWlu
cykgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSB3ZWFrVGhpcy0+ZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbih0b3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWluKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bV9l
bmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2FsbFRpbWU6Om5vdygpICsgd2Vha1RoaXMt
Pm1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1RpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHdl
YWtUaGlzLT5tX3BlcnNpc3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgICAgICAgICB3ZWFrVGhp
cy0+bV9wZXJzaXN0ZW50U3RvcmFnZS0+c2NoZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpZ
ZXMpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgd2Vha1Ro
aXMtPmxvZ1Rlc3RpbmdFdmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgfSk7Ci0gICAgfSk7CisgICAgZm9yIChhdXRvJiB0b3BQcml2YXRlbHlDb250cm9s
bGVkRG9tYWluIDogZG9tYWlucykgeworICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKHRvcFByaXZhdGVseUNvbnRyb2xsZWRE
b21haW4pOworICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7CisgICAgfQog
fQogCiBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVu
c3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpCkBAIC01NTIsNTUgKzM1Miw2IEBA
IFZlY3RvcjxTdHJpbmc+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJl
UHJldmFsZW50UmVzb3VyY2VzRm9yRGViCiAgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9j
azsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAo
ZW5hYmxlKQotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIlR1cm5lZCBJVFAgRGVidWcgTW9kZSBvbi4iKTsKLSNlbmRpZgotCi0gICAgbV9kZWJ1
Z01vZGVFbmFibGVkID0gZW5hYmxlOwotICAgIG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJs
ZTsKLQotICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOwotICAgIC8v
IFRoaXMgd2lsbCBsb2cgdGhlIGN1cnJlbnQgY29va2llIGJsb2NraW5nIHN0YXRlLgotICAgIGlm
IChlbmFibGUpCi0gICAgICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLX0KLQot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKGNvbnN0IFN0cmluZyYgZG9tYWluKQotewotICAgIG1fZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZO
ZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9w
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICsrbV9sYXN0U3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKLSAgICBtX3dvcmtRdWV1ZS0+ZGlz
cGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCwgW3RoaXMsIHdl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
ZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXJdIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIg
fHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgIT0gc3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikgewotICAgICAgICAgICAgLy8gVGhp
cyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOwotICAgICAgICBw
cm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSBXVEY6
Om51bGxvcHQ7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjps
b2dGcmFtZU5hdmlnYXRpb24oY29uc3QgU3RyaW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluLCBjb25z
dCBTdHJpbmcmIG1haW5GcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgc291cmNlUHJp
bWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0YXJnZXRIb3N0LCBjb25zdCBTdHJpbmcmIG1haW5G
cmFtZUhvc3QsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTg0MCw5NSArNTkxLDYgQEAgdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
KGNvbnN0IFN0cmkKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWlu
KHByaW1hcnlSZWRpcmVjdERvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25k
cykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25k
cyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24g
PSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25kcyA+
PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbCA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0K
LSAgICBtX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lID0gc2Vjb25kczsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNl
Y29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBB
U1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2Fw
VGltZSA9IHNlY29uZHM7Ci0gICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLX0KLQotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFy
YW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVdICgpIHsKLSAgICAgICAgc3RvcmUtPnNldENhY2hl
TWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhT
ZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
QVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLSAgICAKLSAgICBtX3BhcmFtZXRlcnMuY2xpZW50U2lk
ZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKLSAgICB1cGRhdGVDbGllbnRTaWRlQ29va2ll
c0FnZUNhcCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLSAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25k
cyA9IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWVdICgpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5ldHdvcmtTZXNzaW9uKCkpCi0g
ICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc2V0QWdl
Q2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7Ci0gICAgfSk7Ci0jZW5kaWYKLX0KLQot
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURhdGFS
ZWNvcmRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBs
dWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMo
KSkgewotICAgICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5zKHBsdWdpbi0+
cGx1Z2luUHJvY2Vzc1Rva2VuKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
I2VuZGlmCi0KLSAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHx8
IE1vbm90b25pY1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3Zl
ZCArIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGF0YVJlY29y
ZHNCZWluZ1JlbW92ZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKLSAgICBpZiAo
bV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKLSAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRz
V2VyZVJlbW92ZWQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLX0KLQogUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjplbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEwNTksMzkgKzcyMSw2IEBA
IGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0
b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0CiAgICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnMoZmlyc3RQYXJ0eVByaW1hcnlEb21haW4p
OwogfQogCi1zdGF0aWMgdm9pZCBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciog
YWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykKLXsKLSNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKLSAgICBzdGF0aWMgY29uc3QgYXV0byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9u
ZUxvZ1N0YXRlbWVudCA9IDUwOwotICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0lu
T25lTG9nU3RhdGVtZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRvbWFpbnNUb1N0cmluZyhk
b21haW5zKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBWZWN0b3I8U3RyaW5nPiBiYXRjaDsKLSAgICBiYXRjaC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KTsKLSAgICBhdXRvIGJhdGNoTnVt
YmVyID0gMTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkJhdGNoZXMgPSBzdGQ6OmNlaWwoZG9tYWlu
cy5zaXplKCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dT
dGF0ZW1lbnQpKTsKLQotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAg
ICBpZiAoYmF0Y2guc2l6ZSgpID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50
KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0
cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1i
ZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJhdGNoLnNocmluaygwKTsKLSAgICAgICAgICAgICsrYmF0Y2hOdW1i
ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7Ci0gICAgfQotICAg
IGlmICghYmF0Y2guaXNFbXB0eSgpKQotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGly
ZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFj
dGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNo
KS51dGY4KCkuZGF0YSgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKGRvbWFpbnMpOwotI2VuZGlmCi19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC0xMTk5LDUyICs4MjgsNiBAQCBWZWN0b3I8U3RyaW5nPiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVAog
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2Fy
eSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRvZGF5
ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAoIW1fb3BlcmF0aW5nRGF0ZXMuaXNF
bXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0
ZXNXaW5kb3cpCi0gICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOwotCi0gICAgbV9v
cGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpIHsKLSAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxs
VGltZShyZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkgPCBt
X29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFsIGNyaXRlcmlhIGZvciBhbiBleHBp
cmVkIHN0YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGluZyBmb3IgYSB0aWdodGVyIHJlc3Ry
aWN0aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpLgotICAgIGlmIChtX3BhcmFtZXRlcnMudGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICBpZiAoV2FsbFRpbWU6Om5vdygpID4gcmVz
b3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBtX3BhcmFtZXRl
cnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1h
eGltdW1FbnRyeUNvdW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvID0g
cHJ1bmVUYXJnZXRDb3VudDsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKQEAgLTEyNjcsMjIgKzg1MCw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiAgICAgQVNTRVJUKCFu
dW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wYXJhbWV0ZXJzID0geyB9Owot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVGVzdGluZ0V2
ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0
b3JlKSwgZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBzdG9yZS0+bG9n
VGVzdGluZ0V2ZW50KGV2ZW50KTsKLSAgICB9KTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFp
biwgU2Vjb25kcyBzZWNvbmRzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpA
QCAtMTMxOSwxNSArODg2LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXIKICAgICB9KTsKIH0K
IAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHVw
ZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgp
OwotICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUuaAppbmRleCA0MGU4MTk3ZjI3Njc4YTViODM4OGI0Y2M4MTRlNWFiMmI0
NGQzYmE5Li5kNDVmNzBkZDhhN2IxNTg2Mjg4MTEyYWExMTZmNGY3NThkMTgxZDY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0yNywx
NyArMjcsMTMgQEAKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCiAKLSNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogI2luY2x1ZGUg
PHd0Zi9Xb3JrUXVldWUuaD4KIAotI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQotI2luY2x1ZGUg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCIKLSNlbmRpZgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBLZXllZERlY29kZXI7CiBjbGFzcyBLZXllZEVuY29kZXI7
CkBAIC00NiwxNjQgKzQyLDk3IEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgT3BlcmF0aW5nRGF0ZTsKIGNsYXNzIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKIAogLy8gVGhpcyBpcyBhbHdheXMgY29u
c3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZT4geworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
IDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7CiBwdWJsaWM6CiAgICAgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSYsIFdvcmtRdWV1ZSYpOwotICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUoKTsKIAogICAgIHZvaWQgc2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlJik7CiAKLSAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpIG92ZXJyaWRlOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQogCisgICAgY29uc3QgSGFzaE1hcDxTdHJpbmcs
IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7IH0KKwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpLZXllZEVuY29kZXI+IGNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpIGNvbnN0OwogICAgIHZvaWQg
bWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKFdlYkNvcmU6OktleWVkRGVjb2RlciYpOwogCiAgICAg
dm9pZCBtZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiYpOwogICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JikgY29uc3Q7CiAKLSAgICB2
b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
IG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKICAgICB2b2lkIGNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAKLSAgICB2
b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBw
cm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgdm9pZCBjbGFzc2lmeVByZXZh
bGVudFJlc291cmNlcygpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgp
IG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1h
cnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3Ry
aW5nJiYgb3BlbmVyUHJpbWFyeURvbWFpbik7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKFN0cmluZyYmIHByaW1hcnlEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Ms
IHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgU3RyaW5nJiYgb3BlbmVyUHJpbWFyeURvbWFpbikgb3Zl
cnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKLSAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwotCi0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJl
c291cmNlVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJyZXNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0
IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdDsKLSAgICBib29sIGlzUmVnaXN0
ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdHJpbmcmIHN1YkZyYW1lUHJpbWFyeURvbWFpbiwg
Y29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0OwotICAgIGJvb2wgaXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaG9zdFJlZGlyZWN0ZWRGcm9t
UHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBob3N0UmVkaXJlY3RlZFRvUHJpbWFyeURvbWFp
bikgY29uc3Q7Ci0KLSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5n
JiBwcmltYXJ5RG9tYWluKTsKLSAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KSBjb25zdDsKLSAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmlt
YXJ5RG9tYWluKSBjb25zdDsKLSAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOwotICAgIHZvaWQgc2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisgICAgdm9pZCBncmFu
ZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwg
Ym9vbCB2YWx1ZSk7Ci0gICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmlt
YXJ5RG9tYWluKSBjb25zdDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihjb25zdCBTdHJpbmcmIHN1YnJlc291cmNlUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0
b3BGcmFtZVByaW1hcnlEb21haW4pIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBj
b25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgU3RyaW5nJiBob3N0UmVkaXJl
Y3RlZEZyb21QcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIGhvc3RSZWRpcmVjdGVkVG9Qcmlt
YXJ5RG9tYWluKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YkZyYW1lRG9tYWluLCBjb25zdCBT
dHJpbmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4s
IGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZyYW1lRG9tYWluKTsKLSAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURv
bWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIHZvaWQgc2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVz
b3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKLSAgICB2
b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJp
bWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pOwotICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiB0b3BGcmFtZVBy
aW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKTsKKyAgICB2
b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBv
dmVycmlkZTsKKyAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmlt
YXJ5RG9tYWluKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291
cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIG92ZXJy
aWRlOworICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5
RG9tYWluLCBib29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChj
b25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBz
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOwotICAgIHZv
aWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsKLSAgICB2
b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgIHZvaWQgaW5jcmVtZW50
UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxTdHJpbmc+Jikgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN0cmluZyYgcHJp
bWFyeVN1YkZyYW1lRG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlUb3BGcmFtZURvbWFpbikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29u
c3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFy
eVRvcEZyYW1lRG9tYWluKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3RyaW5nJiBwcmltYXJ5U3VicmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0RG9tYWluKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdHJpbmcmIHRvcEZy
YW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3Ry
aW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVJlZGlyZWN0
RG9tYWluKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2Vz
QmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwotICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0
VGVsZW1ldHJ5KGJvb2wpOwotICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihT
ZWNvbmRzKTsKLSAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bChTZWNvbmRzKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKLSAg
ICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7Ci0gICAgYm9v
bCBpc0RlYnVnTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7
IH07Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBTdHJp
bmcmIGRvbWFpbik7CisgICAgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25z
dCBvdmVycmlkZTsKIAotICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1
YkZyYW1lUHJpbWFyeURvbWFpbiwgY29uc3QgU3RyaW5nJiB0b3BGcmFtZVByaW1hcnlEb21haW4s
IE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3Ry
aW5nJiYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBTdHJpbmcmJiB0b3BGcmFtZVByaW1hcnlEb21h
aW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVk
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAgICB2
b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0cmluZyYmIHRv
cEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJX
YXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAgdm9p
ZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBj
b25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFt
ZVByaW1hcnlEb21haW4sIFN0cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQg
Z3JhbnRTdG9yYWdlQWNjZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJh
bWVIb3N0LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1By
b21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKIAot
ICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURv
bWFpbiwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcm
IHNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3Ry
aW5nJiBtYWluRnJhbWVIb3N0LCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpOwot
ICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7
Ci0gICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXRQcmlt
YXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZVByaW1hcnlEb21haW4sIFdhbGxUaW1l
IGxhc3RTZWVuKTsKLSAgICB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgU3RyaW5n
JiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRhcmdldFByaW1hcnlEb21haW4p
OworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFy
eURvbWFpbiwgY29uc3QgU3RyaW5nJiBtYWluRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJp
bmcmIHNvdXJjZVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0SG9zdCwgY29uc3Qg
U3RyaW5nJiBtYWluRnJhbWVIb3N0LCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUp
IG92ZXJyaWRlOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29u
c3QgU3RyaW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZVBy
aW1hcnlEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1N1
YnJlc291cmNlUmVkaXJlY3QoY29uc3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25z
dCBTdHJpbmcmIHRhcmdldFByaW1hcnlEb21haW4pIG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVh
clVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pOwotICAgIGJvb2wg
aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbik7CisgICAg
dm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIG92
ZXJyaWRlOworICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFN0cmlu
ZyYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcyk7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCk7Ci0KLSAgICBjb25zdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0
b3JlKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yZTsgfQorICAgIHZvaWQgc2V0TGFzdFNlZW4oY29u
c3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKSBvdmVycmlkZTsKIAogcHJpdmF0ZToK
ICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0Fu
ZFB1cmdlQ29va2llcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAg
ICAgc3RhdGljIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgU3RyaW5nJiBmaXJz
dFBhcnR5UHJpbWFyeURvbWFpbik7CiAgICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2Vy
SW50ZXJhY3Rpb24oV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwotICAg
IGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYpIGNvbnN0OwogICAgIGJvb2wgd2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJy
ZW50LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25z
dDsKICAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3MmLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKICAgICB1bnNpZ25lZCByZWN1cnNp
dmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUb1RoaXNEb21haW4oY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1Ro
YXRIYXZlUmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25z
dDsKLSAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVuYWJsZWQp
IHsgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAgIGJvb2wg
c2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldERlYnVnTG9nZ2dp
bmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0gZW5hYmxl
ZDsgfQotICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7Ci0gICAgdm9p
ZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CiAgICAg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdHJpbmcmJiBzdWJGcmFtZUhvc3QsIFN0
cmluZyYmIHRvcEZyYW1lSG9zdCwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90
IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVj
dGVkVG9QcmV2YWxlbnQoV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIGJv
b2wgaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik7Ci0gICAgVmVjdG9yPFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVi
dWdNb2RlKCk7CisgICAgVmVjdG9yPFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9y
RGVidWdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQo
KTsKKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CiAgICAgV2Vi
Q29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UHJpbWFyeURvbWFpbihjb25zdCBTdHJpbmcmKTsKLSAgICBWZWN0b3I8U3RyaW5nPiB0b3BQcml2
YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKLSAgICB2b2lk
IHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVNYXhBZ2VD
YXAoKTsKLSAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMpOwot
ICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOwotI2VuZGlm
CisgICAgVmVjdG9yPFN0cmluZz4gdG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNUb1JlbW92
ZVdlYnNpdGVEYXRhRm9yKCkgb3ZlcnJpZGU7CiAKLSAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7Ci0g
ICAgICAgIHNpemVfdCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKLSAgICAgICAgc2l6ZV90
IG1heFN0YXRpc3RpY3NFbnRyaWVzIHsgMTAwMCB9OwotICAgICAgICBPcHRpb25hbDxTZWNvbmRz
PiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uOwotICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFfaCB9OwotICAgICAgICBTZWNvbmRzIGdyYW5k
ZmF0aGVyaW5nVGltZSB7IDI0X2ggKiA3IH07Ci0gICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VD
YXBUaW1lIHsgMjRfaCAqIDcgfTsKLSAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0Fn
ZUNhcFRpbWUgeyAyNF9oICogNyB9OwotICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHNob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OwotICAgICAg
ICBib29sIHNob3VsZFN1Ym1pdFRlbGVtZXRyeSB7IHRydWUgfTsKLSAgICB9OwotCi0gICAgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBtX3N0b3JlOwotICAgIFJlZjxXb3JrUXVldWU+
IG1fd29ya1F1ZXVlOwogICAgIFdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3Rl
bnRTdG9yYWdlPiBtX3BlcnNpc3RlbnRTdG9yYWdlOwogICAgIEhhc2hNYXA8U3RyaW5nLCBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKLSNp
ZiBIQVZFKENPUkVfUFJFRElDVElPTikKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllckNvY29hIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0jZWxzZQotICAg
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAg
ICBIYXNoU2V0PHVpbnQ2NF90PiBtX2FjdGl2ZVBsdWdpblRva2VuczsKLSNlbmRpZgotICAgIFBh
cmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwotICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtX29wZXJh
dGluZ0RhdGVzOwotICAgIFdhbGxUaW1lIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsK
LSAgICBib29sIG1fZGVidWdMb2dnaW5nRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2Rl
YnVnTW9kZUVuYWJsZWQgeyBmYWxzZSB9OwotICAgIFN0cmluZyBtX2RlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2U7Ci0gICAgYm9vbCBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKLSAg
ICBNb25vdG9uaWNUaW1lIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkOwotCi0gICAg
dWludDY0X3QgbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAg
fTsKLSAgICBPcHRpb25hbDx1aW50NjRfdD4gbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0SWRlbnRpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmI1OWViNjhk
MDBlMmE5NzFhNzRmNTkzYTNlZTNmYWE1YWYyNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5jcHAKQEAgLTAsMCArMSw1NzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisKKyNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIu
aCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlQWNjZXNz
U3RhdHVzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3Rv
cmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5j
bHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0
aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0
aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitzdGF0
aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucykK
K3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBk
b21haW5zKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFp
bik7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisjZW5kaWYKKwor
T3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkK
K3sKKyAgICBkb3VibGUgbXMgPSB0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRz
KCk7CisgICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7CisgICAgaW50IHllYXJEYXkgPSBkYXlJ
blllYXIobXMsIHllYXIpOworICAgIGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcih5ZWFy
RGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKKyAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJv
bURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKKworICAgIHJldHVybiBPcGVy
YXRpbmdEYXRlIHsgeWVhciwgbW9udGgsIG1vbnRoRGF5IH07Cit9CisKK09wZXJhdGluZ0RhdGUg
T3BlcmF0aW5nRGF0ZTo6dG9kYXkoKQoreworICAgIHJldHVybiBPcGVyYXRpbmdEYXRlOjpmcm9t
V2FsbFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKK30KKworU2Vjb25kcyBPcGVyYXRpbmdEYXRlOjpz
ZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9E
YXlzRnJvbTE5NzAobV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkg
fTsKK30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0Rh
dGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX21vbnRoRGF5ID09IG90aGVyLm1fbW9u
dGhEYXkgJiYgbV9tb250aCA9PSBvdGhlci5tX21vbnRoICYmIG1feWVhciA9PSBvdGhlci5tX3ll
YXI7Cit9CisKK2Jvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0Rh
dGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDwgb3Ro
ZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKK30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRv
cjw9KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzZWNv
bmRzU2luY2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Cit9CisKK2NvbnN0
IGNoYXIqIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGVidWdTdGF0aWNQcmV2YWxlbnRS
ZXNvdXJjZSA9ICIzcmRwYXJ0eXRlc3R3ZWJraXQub3JnIjsKKworUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCisgICAgOiBtX3N0b3Jl
KHN0b3JlKQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNl
c3NhcnkoKTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKK30K
KwordW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5j
ZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAg
ICB1bnNpZ25lZCBpbXBvcnRhbmNlID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXhJ
bXBvcnRhbmNlOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJj
ZSkKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAxOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMu
aGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJu
IGltcG9ydGFuY2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHNSZW1vdmFsID0gdmFsdWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0
VGVsZW1ldHJ5ID0gdmFsdWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIXNob3VsZFJl
bW92ZURhdGFSZWNvcmRzKCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIG1fYWN0aXZl
UGx1Z2luVG9rZW5zLmNsZWFyKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpCisgICAgICAg
IG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsK
KyNlbmRpZgorCisgICAgYXV0byBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSB0b3BQcml2YXRl
bHlDb250cm9sbGVkRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAgICBpZiAocHJl
dmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBjYWxsYmFjaygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
UkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9yICV7cHVibGlj
fXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZhbGVudFJlc291cmNlRG9tYWlucykudXRmOCgpLmRh
dGEoKSk7CisjZW5kaWYKKworICAgIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKHRydWUpOwor
CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMg
PSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNob3VsZE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxk
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93b3Jr
UXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykgewor
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHdlYWtUaGlzLT5tX3N0b3JlLmRlbGV0ZVdlYnNpdGVEYXRhRm9yVG9wUHJpdmF0
ZWx5Q29udHJvbGxlZERvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIFdURk1vdmUocHJldmFs
ZW50UmVzb3VyY2VEb21haW5zKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92
ZSh3ZWFrVGhpcyksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldKGNvbnN0IEhhc2hT
ZXQ8U3RyaW5nPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFibGUgeworICAg
ICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbdG9wRG9tYWlucyA9IGNyb3NzVGhyZWFkQ29w
eShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldICgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2so
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB3ZWFrVGhpcy0+aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFp
bnMoV1RGTW92ZSh0b3BEb21haW5zKSk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPnNldERh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygp
OworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJlY29yZHMuIik7CisjZW5kaWYKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fcGFyYW1ldGVycy5z
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCkKKyAgICAgICAg
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICAKKyAgICByZW1vdmVEYXRhUmVjb3Jk
cyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICAgICAg
c3luY1N0b3JhZ2VJZk5lZWRlZCgpOworCisgICAgICAgIGlmICghbV9wYXJhbWV0ZXJzLnNob3Vs
ZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9j
ZXNzZWQoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5j
b3B5UmVmKCksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IHN0b3JlLT50b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1dpdGhXZWJzaXRlRGF0YShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBzaG91bGRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbd2Vha1RoaXMgPSBXVEZNb3Zl
KHdlYWtUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd29ya1F1ZXVlID0gd29y
a1F1ZXVlLmNvcHlSZWYoKV0gKEhhc2hTZXQ8U3RyaW5nPiYmIHRvcERvbWFpbnNXaXRoV2Vic2l0
ZURhdGEpIG11dGFibGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vha1Ro
aXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgdG9wRG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weSh0b3BE
b21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAgICAgICAg
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmdyYW5kZmF0aGVyRGF0YUZv
ckRvbWFpbnModG9wRG9tYWlucyk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpub3coKSArIHdlYWtUaGlzLT5tX3Bh
cmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lOworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5z
eW5jU3RvcmFnZUltbWVkaWF0ZWx5KCk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAg
ICAgICAgICAgICAgICB3ZWFrVGhpcy0+bG9nVGVzdGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9z
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoYm9vbCBlbmFibGUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoZW5hYmxlKQorICAgICAgICBSRUxFQVNF
X0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlR1cm5lZCBJVFAgRGVidWcg
TW9kZSBvbi4iKTsKKyNlbmRpZgorCisgICAgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5hYmxlOwor
ICAgIG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKKworICAgIGVuc3VyZVByZXZhbGVu
dFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIC8vIFRoaXMgd2lsbCBsb2cgdGhlIGN1cnJl
bnQgY29va2llIGJsb2NraW5nIHN0YXRlLgorICAgIGlmIChlbmFibGUpCisgICAgICAgIHVwZGF0
ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFN0cmluZyYg
ZG9tYWluKQoreworICAgIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGlj
c1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRl
bnRpZmllciA9ICsrbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsK
KyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3Np
bmdJbnRlcnZhbCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdElkZW50aWZpZXJdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElkZW50aWZpZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElkZW50aWZpZXIgIT0gc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikg
eworICAgICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmco
W10oKSB7IH0pOworICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQZW5k
aW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXIgPSBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAw
X3MpOworCisgICAgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPSBzZWNv
bmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisg
ICAgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9IHNl
Y29uZHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZh
dGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMu
Z3JhbmRmYXRoZXJpbmdUaW1lID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwor
CisgICAgbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAgdXBk
YXRlQ2FjaGVNYXhBZ2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVdICgp
IHsKKyAgICAgICAgc3RvcmUtPnNldENhY2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VDYXBG
b3JDbGllbnRTaWRlQ29va2llcyhTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKyAgICAKKyAgICBt
X3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1
cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZiht
X3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRp
bWVdICgpIHsKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5ldHdv
cmtTZXNzaW9uKCkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VT
ZXNzaW9uKCkuc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7CisgICAgfSk7
CisjZW5kaWYKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJl
bW92ZURhdGFSZWNvcmRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Q
cm9jZXNzZXMoKSkgeworICAgICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5z
KHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVS
ZW1vdmVkIHx8IE1vbm90b25pY1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNX
ZXJlUmVtb3ZlZCArIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0YVJl
Y29yZHNCZWluZ1JlbW92ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAgICBp
ZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3Rv
cmUpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUg
eworICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2ll
c0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xl
YXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwg
ZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zKV0geworICAgICAgICBzdG9yZS0+Y2Fs
bFJlbW92ZURvbWFpbnNIYW5kbGVyKGRvbWFpbnMpOworICAgIH0pOworCisgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAgICBwcm9jZXNzRnVuY3Rpb24ocmVzb3Vy
Y2VTdGF0aXN0aWMpOworfQorCitPcHRpb25hbDxTZWNvbmRzPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCkgY29uc3QKK3sKKyAgICBpZiAobV9w
YXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybiBXYWxs
VGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIG1fcGFyYW1ldGVycy50aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uLnZhbHVlKCk7CisgICAgCisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMu
c2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQorICAgICAgICByZXR1cm4gbV9vcGVyYXRp
bmdEYXRlcy5maXJzdCgpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgCisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworVmVjdG9yPE9wZXJhdGluZ0RhdGU+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0
ZT4mIGV4aXN0aW5nRGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKQorewor
ICAgIGlmIChleGlzdGluZ0RhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
bmV3RGF0ZXMpOworICAgIAorICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhl
eGlzdGluZ0RhdGVzLnNpemUoKSArIG5ld0RhdGVzLnNpemUoKSk7CisgICAgCisgICAgLy8gTWVy
Z2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBkYXRlcy4KKyAgICBzdGQ6Om1lcmdlKGV4aXN0
aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0ZXMuYmVnaW4oKSwg
bmV3RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJlZ2luKCkpOworICAgIC8vIFJlbW92ZSBkdXBs
aWNhdGUgZGF0ZXMuCisgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJnZWREYXRlcyk7Cisg
ICAgCisgICAgLy8gRHJvcCBvbGQgZGF0ZXMgdW50aWwgdGhlIFZlY3RvciBzaXplIHJlYWNoZXMg
b3BlcmF0aW5nRGF0ZXNXaW5kb3cuCisgICAgd2hpbGUgKG1lcmdlZERhdGVzLnNpemUoKSA+IG9w
ZXJhdGluZ0RhdGVzV2luZG93KQorICAgICAgICBtZXJnZWREYXRlcy5yZW1vdmUoMCk7CisgICAg
CisgICAgcmV0dXJuIG1lcmdlZERhdGVzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byB0b2RheSA9IE9wZXJhdGlu
Z0RhdGU6OnRvZGF5KCk7CisgICAgaWYgKCFtX29wZXJhdGluZ0RhdGVzLmlzRW1wdHkoKSAmJiB0
b2RheSA8PSBtX29wZXJhdGluZ0RhdGVzLmxhc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
d2hpbGUgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQor
ICAgICAgICBtX29wZXJhdGluZ0RhdGVzLnJlbW92ZSgwKTsKKworICAgIG1fb3BlcmF0aW5nRGF0
ZXMuYXBwZW5kKHRvZGF5KTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1N0YXRpc3RpY3NFeHBpcmVkKFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAg
IGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykgewor
ICAgICAgICBpZiAoT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lKSA8IG1fb3BlcmF0aW5nRGF0ZXMuZmlyc3QoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFs
IGNyaXRlcmlhIGZvciBhbiBleHBpcmVkIHN0YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGlu
ZyBmb3IgYSB0aWdodGVyIHJlc3RyaWN0aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpLgorICAgIGlm
IChtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICBpZiAo
V2FsbFRpbWU6Om5vdygpID4gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBtX3BhcmFt
ZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291
cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSBjb25zdAoreworICAgIHJldHVy
biBoYXNTdGF0aXN0aWNzRXhwaXJlZChyZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BhcmFtZXRlcnMubWF4U3RhdGlz
dGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlDb3VudDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRD
b3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcGFyYW1l
dGVycy5wcnVuZUVudHJpZXNEb3duVG8gPSBwcnVuZVRhcmdldENvdW50OworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcGFyYW1ldGVy
cyA9IHsgfTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1Rlc3Rp
bmdFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYo
bV9zdG9yZSksIGV2ZW50ID0gZXZlbnQuaXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgc3RvcmUt
PmxvZ1Rlc3RpbmdFdmVudChldmVudCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZiht
X3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW3N0b3Jl
ID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1
ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgp
IHsgfSk7CisgICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKKyAgICB1cGRhdGVDbGllbnRTaWRl
Q29va2llc0FnZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mIGRvbWFpbnMpCit7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3Rh
dGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQgPSA1MDsK
KyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoZG9tYWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcs
ICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9y
OiAle3B1YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxTdHJpbmc+
IGJhdGNoOworICAgIGJhdGNoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpOworICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOworICAgIHVu
c2lnbmVkIG51bWJlck9mQmF0Y2hlcyA9IHN0ZDo6Y2VpbChkb21haW5zLnNpemUoKSAvIHN0YXRp
Y19jYXN0PGZsb2F0PihtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkpOworICAg
IAorICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBpZiAoYmF0Y2gu
c2l6ZSgpID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVi
bGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9m
QmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGJhdGNoLnNocmluaygwKTsKKyAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7CisgICAgICAg
IH0KKyAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7CisgICAgfQorICAgIGlmICghYmF0Y2gu
aXNFbXB0eSgpKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250
ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hO
dW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0
YSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7CisgICAgVU5VU0VEX1BBUkFN
KGRvbWFpbnMpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Yjg1
MDUxN2U2MjUzYThmOTk1NDdjZjg1YTM3NDFmODE2NjhmYjAwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgS2V5ZWREZWNvZGVyOworY2xhc3MgS2V5ZWRFbmNv
ZGVyOworc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CisK
K2NsYXNzIE9wZXJhdGluZ0RhdGUgeworcHVibGljOgorICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRl
ZmF1bHQ7CisgICAgCisgICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgZnJvbVdhbGxUaW1lKFdhbGxU
aW1lKTsKKyAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSB0b2RheSgpOworICAgIFNlY29uZHMgc2Vj
b25kc1NpbmNlRXBvY2goKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0
aW5nRGF0ZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGlu
Z0RhdGUmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5n
RGF0ZSYgb3RoZXIpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBPcGVyYXRpbmdEYXRlKGlu
dCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKKyAgICAgICAgOiBtX3llYXIoeWVhcikK
KyAgICAgICAgLCBtX21vbnRoKG1vbnRoKQorICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkp
CisgICAgeyB9CisKKyAgICBpbnQgbV95ZWFyIHsgMCB9OworICAgIGludCBtX21vbnRoIHsgMCB9
OyAvLyBbMCwgMTFdLgorICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgorfTsK
KworLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRo
ZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xh
c3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4geworcHVibGljOgorICAgIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUm
KTsKKyAgICB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKKyAgICBi
b29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5pc0Vt
cHR5KCk7IH0KKworICAgIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzPiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwOyB9CisKKyAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQo
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJikgPSAwOworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKyAgICB2b2lkIGNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisKKyAgICB2
b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAgdm9pZCBw
cm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xh
c3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNTdG9y
YWdlSWZOZWVkZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNTdG9yYWdlSW1tZWRpYXRl
bHkoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9w
ZW5lcihTdHJpbmcmJiBwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRf
dCBvcGVuZXJQYWdlSUQsIFN0cmluZyYmIG9wZW5lclByaW1hcnlEb21haW4pID0gMDsKKyAgICB2
b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
KworICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKGNvbnN0IFN0cmluZyYgc3VicmVzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJp
bmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3RyaW5nJiBzdWJGcmFtZVByaW1hcnlE
b21haW4sIGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBTdHJpbmcm
IGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgaG9zdFJlZGly
ZWN0ZWRUb1ByaW1hcnlEb21haW4pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVh
clByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikgPSAwOworICAg
IHZpcnR1YWwgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbWFy
eURvbWFpbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJp
bmcmIHByaW1hcnlEb21haW4pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFuZGZhdGhl
cmVkKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbiwgYm9vbCB2YWx1ZSkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluKSBj
b25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3Vu
dEZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxTdHJpbmc+JikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3Qg
U3RyaW5nJiBwcmltYXJ5U3ViRnJhbWVEb21haW4sIGNvbnN0IFN0cmluZyYgcHJpbWFyeVRvcEZy
YW1lRG9tYWluKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbihjb25zdCBTdHJpbmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBwcmltYXJ5VG9wRnJhbWVEb21haW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN0cmluZyYgcHJpbWFyeVN1YnJlc291
cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIHByaW1hcnlSZWRpcmVjdERvbWFpbikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJp
bmcmIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJl
Y3REb21haW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFN0cmluZyYgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHBy
aW1hcnlSZWRpcmVjdERvbWFpbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgY29u
c3QgU3RyaW5nJiBwcmltYXJ5UmVkaXJlY3REb21haW4pID0gMDsKKworICAgIHZvaWQgbG9nVGVz
dGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBzZXRNYXhTdGF0aXN0aWNzRW50
cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOworICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVz
RG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsKKyAgICB2b2lkIHJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcygpOworICAgIE9wdGlvbmFsPFNlY29uZHM+IHN0YXRpc3RpY3NFcGly
YXRpb25UaW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRlQW5kU3VibWl0
VGVsZW1ldHJ5KCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJtaXRUZWxlbWV0cnkoYm9vbCk7CisgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKFNlY29uZHMpOworICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKFNlY29uZHMpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMp
OworICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sKTsKKyAg
ICBib29sIGlzRGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5h
YmxlZDsgfTsKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0
IFN0cmluZyYgZG9tYWluKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNv
bnN0IFN0cmluZyYgc3ViRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHRvcEZyYW1l
UHJpbWFyeURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBzdWJGcmFtZVByaW1hcnlEb21haW4sIFN0
cmluZyYmIHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
cGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFn
ZUFjY2Vzc1N0YXR1cyk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRTdG9yYWdlQWNj
ZXNzKFN0cmluZyYmIHN1YkZyYW1lSG9zdCwgU3RyaW5nJiYgdG9wRnJhbWVIb3N0LCB1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9n
RnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbWFyeURvbWFpbiwgY29uc3Qg
U3RyaW5nJiBtYWluRnJhbWVQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIHNvdXJjZVByaW1h
cnlEb21haW4sIGNvbnN0IFN0cmluZyYgdGFyZ2V0SG9zdCwgY29uc3QgU3RyaW5nJiBtYWluRnJh
bWVIb3N0LCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFpbikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3RyaW5n
JiB0YXJnZXRQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJpbmcmIG1haW5GcmFtZVByaW1hcnlEb21h
aW4sIFdhbGxUaW1lIGxhc3RTZWVuKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvZ1N1YnJlc291
cmNlUmVkaXJlY3QoY29uc3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWluLCBjb25zdCBTdHJp
bmcmIHRhcmdldFByaW1hcnlEb21haW4pID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhclVz
ZXJJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4pID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgcHJpbWFyeURvbWFp
bikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFN0cmluZyYgcHJp
bWFyeURvbWFpbiwgU2Vjb25kcykgPSAwOworCisgICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJv
Y2VzcygpOworCisgICAgY29uc3QgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9y
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5z
aWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB1bnNp
Z25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik7CisgICAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0Rh
dGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9w
ZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpOworICAgIHN0YXRpYyB2b2lkIGRlYnVnTG9nRG9tYWlu
c0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21h
aW5zKTsKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVk
KFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSBjb25zdDsKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyNl
bmRpZgorICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vz
c2FyeSgpOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gZW5zdXJlUHJldmFsZW50UmVzb3Vy
Y2VzRm9yRGVidWdNb2RlKCkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdG9wUHJp
dmF0ZWx5Q29udHJvbGxlZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpID0gMDsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsg
bV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQorICAgIGJvb2wgc2hv
dWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldERlYnVnTG9nZ2dpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0gZW5hYmxlZDsg
fQorICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7CisgICAgdm9pZCBy
ZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQg
c2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcyk7CisgICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNh
cCgpOworICAgIHZvaWQgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Cisg
ICAgdm9pZCB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworCisgICAgc3RydWN0IFBh
cmFtZXRlcnMgeworICAgICAgICBzaXplX3QgcHJ1bmVFbnRyaWVzRG93blRvIHsgODAwIH07Cisg
ICAgICAgIHNpemVfdCBtYXhTdGF0aXN0aWNzRW50cmllcyB7IDEwMDAgfTsKKyAgICAgICAgT3B0
aW9uYWw8U2Vjb25kcz4gdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbjsKKyAgICAgICAgU2Vjb25k
cyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgeyAxX2ggfTsKKyAgICAgICAg
U2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAyNF9oICogNyB9OworICAgICAgICBTZWNvbmRz
IGNhY2hlTWF4QWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07CisgICAgICAgIFNlY29uZHMgY2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXBUaW1lIHsgMjRfaCAqIDcgfTsKKyAgICAgICAgYm9vbCBzaG91bGRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIHsgZmFsc2UgfTsKKyAgICAgICAg
Ym9vbCBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCB7IHRy
dWUgfTsKKyAgICAgICAgYm9vbCBzaG91bGRTdWJtaXRUZWxlbWV0cnkgeyB0cnVlIH07CisgICAg
fTsKKworcHJvdGVjdGVkOgorICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgbV9z
dG9yZTsKKyAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKKyAgICBIYXNoTWFwPFN0cmlu
ZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXA7CisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXJDb2NvYSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOworI2Vs
c2UKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllciBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyOworI2VuZGlmCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCisgICAgSGFzaFNldDx1aW50NjRfdD4gbV9hY3RpdmVQbHVnaW5Ub2tlbnM7CisjZW5kaWYK
KyAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKKyAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4g
bV9vcGVyYXRpbmdEYXRlczsKKyAgICBXYWxsVGltZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1l
c3RhbXA7CisgICAgYm9vbCBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBTdHJpbmcgbV9kZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlOworICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNl
IH07CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZDsK
KworICAgIHVpbnQ2NF90IG1fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgeyAwIH07CisgICAgT3B0aW9uYWw8dWludDY0X3Q+IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdElkZW50aWZpZXI7CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVD
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZDM1ZTVmMjgyMWZmMTU1
MmM0NWM2ZGFjOGIyMTM4Njc2ZjNlZDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNv
Y29hLm1tCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisKKyNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKK3sKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IGluaXRPbmNlOworCisgICAgZGlzcGF0Y2hfb25jZSgmaW5pdE9uY2UsIF57
CisgICAgICAgIFNlY29uZHMgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiJdKTsKKyAgICAgICAgaWYgKHRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24gPiAwX3MgJiYgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA8PSAy
NF9oICogMzApCisgICAgICAgICAgICBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKHRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24pOworCisgICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwiXSk7CisgICAgICAgIGlmIChtaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwgPiAwX3MgJiYgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsIDwgMV9oKQorICAgICAgICAgICAgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk7CisKKyAgICAg
ICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0dyYW5kZmF0
aGVyaW5nVGltZSJdKTsKKyAgICAgICAgaWYgKGdyYW5kZmF0aGVyaW5nVGltZSA+IDBfcyAmJiBn
cmFuZGZhdGhlcmluZ1RpbWUgPD0gMjRfaCAqIDcpCisgICAgICAgICAgICBzZXRHcmFuZGZhdGhl
cmluZ1RpbWUoZ3JhbmRmYXRoZXJpbmdUaW1lKTsKKworICAgICAgICBzZXRSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IGJvb2xGb3JLZXk6QCJJdHBEZWJ1Z01vZGUiXSk7CisgICAgICAgIGF1dG8qIGRlYnVnTWFudWFs
UHJldmFsZW50UmVzb3VyY2UgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBzdHJpbmdGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVz
b3VyY2UiXTsKKyAgICAgICAgaWYgKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpCisgICAg
ICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShkZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKworICAgICAgICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJs
ZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCJdKTsKKyAgICAg
ICAgaWYgKGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzID4gMF9zICYmIGNhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzIDw9IDI0X2ggKiAzNjUpCisgICAgICAgICAg
ICBzZXRDYWNoZU1heEFnZUNhcChjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk7
CisgICAgICAgIAorICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGllbnRTaWRlQ29va2llc0FnZUNhcCJdKTsKKyAgICAgICAgaWYgKGNs
aWVudFNpZGVDb29raWVzQWdlQ2FwID4gMF9zICYmIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwIDw9
IDI0X2ggKiAzNjUpCisgICAgICAgICAgICBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhj
bGllbnRTaWRlQ29va2llc0FnZUNhcCk7CisgICAgfSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IGUwZGFj
MjFkNjc5NjdkNzRkYzVhM2E5ZjQ0ODY3NGI4M2FjOTU1ZWEuLjBjZDYwZjY2NTBjYTQyZTcyYjBh
Y2YyODFmMGJiMGRiZDc3YjdhY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0zMCw3ICszMCw5IEBACiAKICNpbmNsdWRlICJBUElEaWN0
aW9uYXJ5LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNz
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0
ZW50U3RvcmFnZS5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgpA
QCAtNDcsNiArNDksOSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1
bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYv
Q2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+
CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC05MCw3ICs5NSw5IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAg
ICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CisgICAgICAg
IGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKICAgICB9KTsKIH0K
QEAgLTEwMCw5ICsxMDcsMTEgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm8KICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUp
CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQodmFsdWUpOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQog
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCh2YWx1ZSk7Ci0gICAgICAgIAorCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTEyLDcgKzEyMSw5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNl
U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKHZhbHVlKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKQEAgLTEyNCw3ICsxMzUsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wgdmFsdWUpCiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0gewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkK
KyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KHZh
bHVlKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSh2YWx1ZSk7CiAgICAgfSk7CiB9CkBA
IC0xNDcsMTEgKzE2MCwxNSBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShOZXR3b3JrU2Vzc2lvbiYgbgogICAgIHBvc3RUYXNr
KFt0aGlzLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RpcmVjdG9yeS5pc29sYXRlZENvcHkoKV0gewogICAgICAgICBtX21lbW9yeVN0b3Jl
ID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0
aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSk7CiAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4o
Km1fbWVtb3J5U3RvcmUsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5KTsKKyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuaXRwRGF0YWJhc2VNb2RlRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBtX2RhdGFi
YXNlU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlPigqdGhpcywgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkpOworICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5wb3B1bGF0ZUZyb21NZW1v
cnlTdG9yZSgqbV9tZW1vcnlTdG9yZSk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRSgx
OTMyOTcpOiBUaGlzIHNob3VsZCBiZSByZXZpc2VkIGFmdGVyIHRoZSBVSVByb2Nlc3MgdmVyc2lv
biBnb2VzIGF3YXkuCiAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9j
ZXNzKCk7CiAgICAgfSk7Ci0gICAgCisKICAgICBtX2RhaWx5VGFza3NUaW1lci5zdGFydFJlcGVh
dGluZygyNF9oKTsKIH0KIApAQCAtMTkxLDYgKzIwOCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKQogICAgIG1f
c3RhdGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbJnNlbWFwaG9yZSwgdGhpc10gewogICAgICAgICBt
X3BlcnNpc3RlbnRTdG9yYWdlID0gbnVsbHB0cjsKICAgICAgICAgbV9tZW1vcnlTdG9yZSA9IG51
bGxwdHI7CisgICAgICAgIG1fZGF0YWJhc2VTdG9yZSA9IG51bGxwdHI7CiAgICAgICAgIHNlbWFw
aG9yZS5zaWduYWwoKTsKICAgICB9KTsKICAgICBzZW1hcGhvcmUud2FpdCgpOwpAQCAtMjAxLDcg
KzIxOSw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsCiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBt
X2RhdGFiYXNlU3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUp
OworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSh2YWx1ZSk7CiAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAt
MjEyLDcgKzIzMiw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBTdHJpCiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9
IGlzb2xhdGVkUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBt
X2RhdGFiYXNlU3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKHByaW1hcnlE
b21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9t
ZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUocHJpbWFyeURvbWFp
bik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwpAQCAtMjIzLDcgKzI0NSw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoCiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUp
CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJl
Y29yZHMoKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC0y
NjIsMTcgKzI4NiwyNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFz
U3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHN1YkZyYW1lSG9zdAogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVQcmltYXJ5RG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YkZyYW1lSG9zdCksIHRvcEZyYW1lUHJpbWFy
eURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBw
YWdlSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1f
bWVtb3J5U3RvcmUgJiYgIW1fZGF0YWJhc2VTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX21l
bW9yeVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzKHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgdG9wRnJh
bWVQcmltYXJ5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUg
ewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgaGFzU3RvcmFnZUFjY2Vzc10oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYXNTdG9yYWdlQWNjZXNzKTsKKworCisgICAg
ICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpIHsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+
aGFzU3RvcmFnZUFjY2VzcyhzdWJGcmFtZVByaW1hcnlEb21haW4sIHRvcEZyYW1lUHJpbWFyeURv
bWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNTdG9yYWdlQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBoYXNTdG9yYWdlQWNjZXNzXSgpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYXNTdG9yYWdlQWNjZXNzKTsKKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlm
IChtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5oYXNTdG9yYWdl
QWNjZXNzKHN1YkZyYW1lUHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBmcmFt
ZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBv
c3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VBY2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzMzLDE4ICszNjcs
MjYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdl
QWNjZXNzKGNvbnN0IFN0cmluZyYgc3ViRnJhbWUKICAgICB9CiAKICAgICBwb3N0VGFzayhbdGhp
cywgc3ViRnJhbWVQcmltYXJ5RG9tYWluID0gY3Jvc3NUaHJlYWRDb3B5KHN1YkZyYW1lUHJpbWFy
eURvbWFpbiksIHRvcEZyYW1lUHJpbWFyeURvbWFpbiA9IGNyb3NzVGhyZWFkQ29weSh0b3BGcmFt
ZVByaW1hcnlEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHByb21wdEVuYWJsZWQsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUgJiYg
IW1fZGF0YWJhc2VTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RS
ZXF1ZXN0QWNjZXNzKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RG
TW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lUHJpbWFyeURvbWFp
biksIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3RvcmFnZUFjY2Vzc1N0YXR1cyBz
dGF0dXMpIG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhdHVzXSgpIG11dGFibGUgewot
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgIGlmICht
X2RhdGFiYXNlU3RvcmUpIHsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+cmVxdWVzdFN0
b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZVByaW1hcnlEb21haW4pLCBXVEZNb3ZlKHRvcEZy
YW1lUHJpbWFyeURvbWFpbiksIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFibGVk
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3RvcmFn
ZUFjY2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNr
UmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0
YXR1c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
c3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9
KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhzdWJGcmFtZVByaW1hcnlEb21haW4uaXNv
bGF0ZWRDb3B5KCksIHRvcEZyYW1lUHJpbWFyeURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJ
RC52YWx1ZSgpLCBwYWdlSUQsIHByb21wdEVuYWJsZWQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTdG9yYWdlQWNjZXNzU3RhdHVzIHN0YXR1cykgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhdHVzXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0dXMpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzU2LDgg
KzM5OCwxMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0
b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihTdHJpbmcmJiBwcgogICAgIC8vIGNvbWluZyBmcm9tIElQ
Qy4gU3RyaW5ncyB3aGljaCBhcmUgc2FmZSB0byBtb3ZlIHRvIG90aGVyIHRocmVhZHMgYXMgbG9u
ZyBhcyBub2JvZHkgb24gdGhpcyB0aHJlYWQgaG9sZHMgYSByZWZlcmVuY2UKICAgICAvLyB0byB0
aG9zZSBzdHJpbmdzLgogICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluSW5OZWVkT2ZT
dG9yYWdlQWNjZXNzID0gV1RGTW92ZShwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
KSwgb3BlbmVyUGFnZUlELCBvcGVuZXJQcmltYXJ5RG9tYWluID0gV1RGTW92ZShvcGVuZXJQcmlt
YXJ5RG9tYWluKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFdU
Rk1vdmUocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwg
V1RGTW92ZShvcGVuZXJQcmltYXJ5RG9tYWluKSk7CisgICAgICAgIGlmIChtX2RhdGFiYXNlU3Rv
cmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5k
ZXJPcGVuZXIoV1RGTW92ZShwcmltYXJ5RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3Bl
bmVyUGFnZUlELCBXVEZNb3ZlKG9wZW5lclByaW1hcnlEb21haW4pKTsKKyAgICAgICAgZWxzZSBp
ZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9y
YWdlQWNjZXNzVW5kZXJPcGVuZXIocHJpbWFyeURvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5p
c29sYXRlZENvcHkoKSwgb3BlbmVyUGFnZUlELCBvcGVuZXJQcmltYXJ5RG9tYWluLmlzb2xhdGVk
Q29weSgpKTsKICAgICB9KTsKIH0KIApAQCAtMzY1LDE4ICs0MDksMjYgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyhjb25zdCBTdHJpbmcm
IHN1YkZyYW1lSG8KIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RU
YXNrKFt0aGlzLCBzdWJGcmFtZUhvc3QgPSBjcm9zc1RocmVhZENvcHkoc3ViRnJhbWVIb3N0KSwg
dG9wRnJhbWVIb3N0ID0gY3Jvc3NUaHJlYWRDb3B5KHRvcEZyYW1lSG9zdCksIGZyYW1lSUQsIHBh
Z2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUp
IHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKICAg
ICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5ncmFudFN0b3JhZ2VBY2Nlc3MoV1RGTW92
ZShzdWJGcmFtZUhvc3QpLCBXVEZNb3ZlKHRvcEZyYW1lSG9zdCksIGZyYW1lSUQsIHBhZ2VJRCwg
dXNlcldhc1Byb21wdGVkTm93LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oYm9vbCB3YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgICAg
IHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIHdhc0dyYW50ZWRBY2Nlc3NdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZEFjY2Vzcyk7CisgICAgICAgIGlmIChtX2RhdGFiYXNl
U3RvcmUpIHsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNz
KFdURk1vdmUoc3ViRnJhbWVIb3N0KSwgV1RGTW92ZSh0b3BGcmFtZUhvc3QpLCBmcmFtZUlELCBw
YWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZEFjY2Vzcyk7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgIH0gZWxz
ZSBpZiAobV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRT
dG9yYWdlQWNjZXNzKHN1YkZyYW1lSG9zdC5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVIb3N0Lmlz
b2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRl
ZEFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vz
c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Fz
R3JhbnRlZEFjY2Vzcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQogICAgIH0pOwogfQogCkBAIC00MzEsMTEgKzQ4MywxMyBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyZm9ybURhaWx5VGFza3MoKQogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpc10gewotICAgICAgICBpZiAo
IW1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9tZW1vcnlT
dG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAg
bV9tZW1vcnlTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgICAgIGlm
IChtX2RhdGFiYXNlU3RvcmUpIHsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+aW5jbHVk
ZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIG1fZGF0YWJh
c2VTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgICAgIH0gZWxzZSBp
ZiAobV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+aW5jbHVkZVRv
ZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgICAgICB9CiAgICAgfSk7CiB9
CiAKQEAgLTQ4NSw3ICs1MzksOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHJpbQogewogICAgIHBv
c3RUYXNrKFt0aGlzLCB0YXJnZXRQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWlu
KHRhcmdldFByaW1hcnlEb21haW4pLCBtYWluRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQ
cmltYXJ5RG9tYWluKG1haW5GcmFtZVByaW1hcnlEb21haW4pLCBzb3VyY2VQcmltYXJ5RG9tYWlu
ID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHNvdXJjZVByaW1hcnlEb21haW4pLCB0YXJnZXRIb3N0
ID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRhcmdldEhvc3QpLCBtYWluRnJhbWVIb3N0ID0gaXNv
bGF0ZWRQcmltYXJ5RG9tYWluKG1haW5GcmFtZUhvc3QpLCBpc1JlZGlyZWN0LCBpc01haW5GcmFt
ZV0gewogICAgICAgICAKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmICht
X2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmxvZ0ZyYW1lTmF2
aWdhdGlvbih0YXJnZXRQcmltYXJ5RG9tYWluLCBtYWluRnJhbWVQcmltYXJ5RG9tYWluLCBzb3Vy
Y2VQcmltYXJ5RG9tYWluLCB0YXJnZXRIb3N0LCBtYWluRnJhbWVIb3N0LCBpc1JlZGlyZWN0LCBp
c01haW5GcmFtZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5sb2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0UHJpbWFyeURvbWFpbiwg
bWFpbkZyYW1lUHJpbWFyeURvbWFpbiwgc291cmNlUHJpbWFyeURvbWFpbiwgdGFyZ2V0SG9zdCwg
bWFpbkZyYW1lSG9zdCwgaXNSZWRpcmVjdCwgaXNNYWluRnJhbWUpOwogICAgIH0pOwogfQpAQCAt
NDkzLDcgKzU0OSw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dG
cmFtZU5hdmlnYXRpb24oY29uc3QgU3RyaW5nJiB0YXJnZXRQcmltCiB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nV2ViU29ja2V0TG9hZGluZyhjb25zdCBTdHJpbmcmIHRh
cmdldFByaW1hcnlEb21haW4sIGNvbnN0IFN0cmluZyYgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiwg
V2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0UHJpbWFyeURvbWFpbiA9IGlz
b2xhdGVkUHJpbWFyeURvbWFpbih0YXJnZXRQcmltYXJ5RG9tYWluKSwgbWFpbkZyYW1lUHJpbWFy
eURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihtYWluRnJhbWVQcmltYXJ5RG9tYWluKSwg
bGFzdFNlZW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9k
YXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5sb2dTdWJyZXNvdXJj
ZUxvYWRpbmcodGFyZ2V0UHJpbWFyeURvbWFpbiwgbWFpbkZyYW1lUHJpbWFyeURvbWFpbiwgbGFz
dFNlZW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9t
ZW1vcnlTdG9yZS0+bG9nU3VicmVzb3VyY2VMb2FkaW5nKHRhcmdldFByaW1hcnlEb21haW4sIG1h
aW5GcmFtZVByaW1hcnlEb21haW4sIGxhc3RTZWVuKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTUwMyw5ICs1NjEsMTEgQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3Qg
U3RyaW5nJiB0YXJnZXRQcmkKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjps
b2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXRQcmltYXJ5RG9tYWluLCBj
b25zdCBTdHJpbmcmIG1haW5GcmFtZVByaW1hcnlEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9z
dFRhc2soW3RoaXMsIHRhcmdldFByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4o
dGFyZ2V0UHJpbWFyeURvbWFpbiksIG1haW5GcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFBy
aW1hcnlEb21haW4obWFpbkZyYW1lUHJpbWFyeURvbWFpbiksIGxhc3RTZWVuLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAg
ICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+bG9nU3VicmVzb3VyY2VMb2FkaW5nKHRhcmdldFByaW1h
cnlEb21haW4sIG1haW5GcmFtZVByaW1hcnlEb21haW4sIGxhc3RTZWVuKTsKKyAgICAgICAgZWxz
ZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJl
c291cmNlTG9hZGluZyh0YXJnZXRQcmltYXJ5RG9tYWluLCBtYWluRnJhbWVQcmltYXJ5RG9tYWlu
LCBsYXN0U2Vlbik7Ci0gICAgICAgIAorCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNTEzLDkgKzU3MywxMSBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNv
bnN0IFN0cmluZyYgdGFyZ2V0UAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgU3RyaW5nJiBzb3VyY2VQcmltYXJ5RG9tYWlu
LCBjb25zdCBTdHJpbmcmIHRhcmdldFByaW1hcnlEb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgc291cmNl
UHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihzb3VyY2VQcmltYXJ5RG9tYWlu
KSwgdGFyZ2V0UHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0YXJnZXRQcmlt
YXJ5RG9tYWluKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmICht
X2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmxvZ1N1YnJlc291
cmNlUmVkaXJlY3Qoc291cmNlUHJpbWFyeURvbWFpbiwgdGFyZ2V0UHJpbWFyeURvbWFpbik7Cisg
ICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5sb2dTdWJyZXNvdXJjZVJlZGlyZWN0KHNvdXJjZVByaW1hcnlEb21haW4sIHRhcmdldFByaW1h
cnlEb21haW4pOwotICAgICAgICAKKwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTUyNSw3ICs1ODcsOSBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFN0
cmluZyYgdGFyZ2V0UHJpbQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBw
b3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0YXJn
ZXRQcmltYXJ5RG9tYWluKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAg
IGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmxvZ1Vz
ZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlT
dG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1VzZXJJbnRlcmFjdGlvbihwcmlt
YXJ5RG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgfSk7CkBAIC01MzYsNyArNjAwLDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0
UHIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0
aGlzLCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRhcmdldFByaW1hcnlE
b21haW4pLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0
YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Y2xlYXJVc2VySW50ZXJh
Y3Rpb24ocHJpbWFyeURvbWFpbik7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAg
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhclVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9t
YWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgfSk7CkBAIC01NDUsNyArNjExLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgdGFyZ2V0UHIKIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24o
Y29uc3QgU3RyaW5nJiBwcmltYXJ5RG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBi
b29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5o
YXNIYWRVc2VySW50ZXJhY3Rpb24ocHJpbWFyeURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9v
bCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFiYXNlU3RvcmUt
Pmhhc0hhZFVzZXJJbnRlcmFjdGlvbihwcmltYXJ5RG9tYWluKQorICAgICAgICAgICAgOiBtX21l
bW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aGFzSGFkVXNlckludGVyYWN0aW9uKHByaW1hcnlE
b21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2hhZFVzZXJJbnRlcmFjdGlv
biwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhZFVzZXJJbnRlcmFjdGlvbik7
CiAgICAgICAgIH0pOwpAQCAtNTU3LDcgKzYyNCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBT
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhp
cywgcmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4ocmVzb3VyY2VEb21haW4p
LCBzZWNvbmRzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1f
ZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0TGFzdFNlZW4o
cmVzb3VyY2VEb21haW4sIHNlY29uZHMpOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3Jl
KQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TGFzdFNlZW4ocmVzb3VyY2VEb21haW4s
IHNlY29uZHMpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICB9KTsKQEAgLTU2OCw3ICs2MzcsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiByZXNvdXJj
ZQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywg
cmVzb3VyY2VEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4ocmVzb3VyY2VEb21haW4pLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9y
ZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2UocmVz
b3VyY2VEb21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VEb21haW4pOwog
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKQEAgLTU3OSw3ICs2NTAsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFN0cmluZyYgcHJpbQogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgcHJpbWFyeURvbWFp
biA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihwcmltYXJ5RG9tYWluKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAg
ICBtX2RhdGFiYXNlU3RvcmUtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9tYWlu
KTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9tYWluKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC02
MDIsNyArNjc1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJl
dmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYXJ5RG8KICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBwcmltYXJ5RG9tYWluID0g
aXNvbGF0ZWRQcmltYXJ5RG9tYWluKHByaW1hcnlEb21haW4pLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBib29sIGlz
UHJldmFsZW50UmVzb3VyY2UgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNQcmV2
YWxlbnRSZXNvdXJjZShwcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29sIGlzUHJl
dmFsZW50UmVzb3VyY2UgPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFiYXNlU3RvcmUtPmlzUHJl
dmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbikKKyAgICAgICAgICAgIDogbV9tZW1vcnlTdG9y
ZSA/IG1fbWVtb3J5U3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbikgOiBm
YWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNQcmV2YWxlbnRSZXNvdXJjZSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUHJldmFsZW50UmVzb3VyY2UpOwogICAgICAg
ICB9KTsKQEAgLTYxNCw3ICs2ODgsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgU3RyaW5nJiBwcmltYQogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIHByaW1h
cnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbiksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1v
cnlTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbikgOiBmYWxzZTsK
KyAgICAgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IG1fZGF0YWJhc2VTdG9yZSA/
IG1fZGF0YWJhc2VTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UocHJpbWFyeURvbWFpbikK
KyAgICAgICAgICAgIDogbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzVmVyeVByZXZh
bGVudFJlc291cmNlKHByaW1hcnlEb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVw
bHkoW2lzVmVyeVByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICB9KTsKQEAgLTYyNiw3ICs3
MDEsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN0cmluZwogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3VicmVzb3VyY2VQcmltYXJ5RG9tYWluID0g
aXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YnJlc291cmNlKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWlu
ID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1Jl
Z2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9y
ZS0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlUHJpbWFyeURvbWFp
biwgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29sIGlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fZGF0YWJhc2VTdG9yZSA/IG1fZGF0YWJhc2VTdG9y
ZS0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlUHJpbWFyeURvbWFp
biwgdG9wRnJhbWVQcmltYXJ5RG9tYWluKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0b3JlID8g
bV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNl
UHJpbWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSA6IGZhbHNlOwogICAgICAgICBw
b3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOwog
ICAgICAgICB9KTsKQEAgLTYzOCw3ICs3MTQsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN0cmluZyYgcwog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3Vi
RnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YkZyYW1lKSwgdG9w
RnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBtX21lbW9yeVN0b3Jl
ID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lUHJp
bWFyeURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29s
IGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciA9IG1fZGF0YWJhc2VTdG9yZSA/IG1fZGF0YWJh
c2VTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lUHJpbWFyeURvbWFp
biwgdG9wRnJhbWVQcmltYXJ5RG9tYWluKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0b3JlID8g
bV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lUHJpbWFy
eURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluKSA6IGZhbHNlOwogICAgICAgICBwb3N0VGFz
a1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOwogICAgICAgICB9KTsK
QEAgLTY1MCw3ICs3MjcsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFN0cmluZyYgaAogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgaG9zdFJlZGlyZWN0ZWRG
cm9tUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbihob3N0UmVkaXJlY3RlZEZy
b20pLCBob3N0UmVkaXJlY3RlZFRvUHJpbWFyeURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURvbWFp
bihob3N0UmVkaXJlY3RlZFRvKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8gPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4sIGhvc3RSZWRpcmVj
dGVkVG9QcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyA9IG1fZGF0YWJhc2VTdG9yZSA/IG1fZGF0YWJhc2VTdG9yZS0+aXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVjdGVkRnJvbVByaW1hcnlEb21haW4sIGhv
c3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWluKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0b3Jl
ID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGhvc3RSZWRpcmVj
dGVkRnJvbVByaW1hcnlEb21haW4sIGhvc3RSZWRpcmVjdGVkVG9QcmltYXJ5RG9tYWluKSA6IGZh
bHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8s
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8pOwogICAgICAgICB9KTsKQEAgLTY2Miw3ICs3NDAsOSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBTdHJpbmcm
IHJlc291cgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRh
c2soW3RoaXMsIHJlc291cmNlRG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHJlc291cmNl
RG9tYWluKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2Rh
dGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmNsZWFyUHJldmFsZW50
UmVzb3VyY2UocmVzb3VyY2VEb21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3Jl
KQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZURvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwpAQCAtNjczLDcgKzc1Myw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFN0cmluZyYgZG9tYWluLCBi
b29sCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlz
LCBwcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKGRvbWFpbiksIHZhbHVlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9y
ZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0R3JhbmRmYXRoZXJlZChwcmltYXJ5
RG9tYWluLCB2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmVkKHByaW1hcnlEb21haW4sIHZhbHVl
KTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgfSk7CkBAIC02ODQsNyArNzY2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBTdHJpbmcmIHByaW1hcnlEb21haW4KICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHByaW1hcnlEb21haW4gPSBp
c29sYXRlZFByaW1hcnlEb21haW4ocHJpbWFyeURvbWFpbildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGJvb2wgaXNHcmFuZEZhdGhlcmVkID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlz
R3JhbmRmYXRoZXJlZChwcmltYXJ5RG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29sIGlzR3Jh
bmRGYXRoZXJlZCA9IG1fZGF0YWJhc2VTdG9yZSA/IG1fZGF0YWJhc2VTdG9yZS0+aXNHcmFuZGZh
dGhlcmVkKHByaW1hcnlEb21haW4pCisgICAgICAgICAgICA6IG1fbWVtb3J5U3RvcmUgPyBtX21l
bW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQocHJpbWFyeURvbWFpbikgOiBmYWxzZTsKICAgICAg
ICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVkLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoaXNHcmFuZEZhdGhlcmVkKTsKICAgICAgICAgfSk7CkBAIC02OTYsNyArNzc5
LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdHJpbmcKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBwcmltYXJ5VG9wRnJhbWVEb21haW4gPSBpc29sYXRlZFBy
aW1hcnlEb21haW4odG9wRnJhbWUpLCBwcmltYXJ5U3ViRnJhbWVEb21haW4gPSBpc29sYXRlZFBy
aW1hcnlEb21haW4oc3ViZnJhbWUpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJh
c2VTdG9yZS0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHByaW1hcnlTdWJGcmFtZURv
bWFpbiwgcHJpbWFyeVRvcEZyYW1lRG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlT
dG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbihwcmltYXJ5U3ViRnJhbWVEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFpbik7CiAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0p
OwpAQCAtNzA3LDcgKzc5Miw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3RyCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcHJpbWFyeVRvcEZyYW1lRG9t
YWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lKSwgcHJpbWFyeVN1YnJlc291cmNl
RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHN1YnJlc291cmNlKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUp
CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbihwcmltYXJ5U3VicmVzb3VyY2VEb21haW4sIHByaW1hcnlUb3BGcmFtZURvbWFpbik7
CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4ocHJpbWFyeVN1YnJlc291cmNl
RG9tYWluLCBwcmltYXJ5VG9wRnJhbWVEb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTcxOCw3ICs4MDUsOSBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdFRvKGNvbnN0IFN0cmluZwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIHByaW1hcnlSZWRpcmVjdERvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURv
bWFpbihob3N0TmFtZVJlZGlyZWN0ZWRUbyksIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiA9IGlz
b2xhdGVkUHJpbWFyeURvbWFpbihzdWJyZXNvdXJjZSldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAg
ICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8ocHJpbWFy
eVN1YnJlc291cmNlRG9tYWluLCBwcmltYXJ5UmVkaXJlY3REb21haW4pOworICAgICAgICBlbHNl
IGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiwgcHJpbWFyeVJl
ZGlyZWN0RG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgfSk7CkBAIC03MjksNyArODE4LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFN0cmkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNr
KFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBw
cmltYXJ5UmVkaXJlY3REb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRp
cmVjdGVkRnJvbSksIHByaW1hcnlTdWJyZXNvdXJjZURvbWFpbiA9IGlzb2xhdGVkUHJpbWFyeURv
bWFpbihzdWJyZXNvdXJjZSldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0
b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShwcmltYXJ5U3VicmVzb3VyY2VE
b21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5
U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbShwcmltYXJ5U3VicmVzb3VyY2VEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFp
bik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwpAQCAtNzQwLDcgKzgzMSw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3RyaW5nJiB0CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgdG9wRnJhbWVQcmlt
YXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZyYW1lSG9zdE5hbWUpLCBwcmlt
YXJ5UmVkaXJlY3REb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVj
dGVkVG8pXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAg
aWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0VG9w
RnJhbWVVbmlxdWVSZWRpcmVjdFRvKHRvcEZyYW1lUHJpbWFyeURvbWFpbiwgcHJpbWFyeVJlZGly
ZWN0RG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyh0b3BGcmFtZVByaW1h
cnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNzUxLDcgKzg0NCw5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBTdHJpbmcmCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5
RG9tYWluKHRvcEZyYW1lSG9zdE5hbWUpLCBwcmltYXJ5UmVkaXJlY3REb21haW4gPSBpc29sYXRl
ZFByaW1hcnlEb21haW4oaG9zdE5hbWVSZWRpcmVjdGVkRnJvbSldKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAg
ICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0
b3BGcmFtZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRpcmVjdERvbWFpbik7CisgICAgICAgIGVs
c2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFtZVByaW1hcnlEb21haW4sIHByaW1hcnlSZWRp
cmVjdERvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwpAQCAtNzYzLDEzICs4NTgsMTkgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlv
bkhhbmQKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3Ro
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fbWVt
b3J5U3RvcmUgJiYgIW1fZGF0YWJhc2VTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisK
KyAgICAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBpZiAobV9kYXRhYmFzZVN0
b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhb
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0p
OworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldKCkgeyB9KTsKICAgICB9KTsKIH0KIApAQCAtNzc4LDE0ICs4
NzksMTkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29v
a2llQmxvY2tpbmdVcGRhdGVGb3JEb21haW5zKGNvbnMKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9tZW1vcnlT
dG9yZSAmJiAhbV9kYXRhYmFzZVN0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlu
cyhkb21haW5zVG9CbG9jaywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOworCisgICAgICAgIGlm
IChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnVwZGF0ZUNv
b2tpZUJsb2NraW5nRm9yRG9tYWlucyhkb21haW5zVG9CbG9jaywgW2NhbGxiYWNrQWdncmVnYXRv
ciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKCkgeyB9KTsKKyAgICAgICAgZWxzZSBp
ZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tp
ZUJsb2NraW5nRm9yRG9tYWlucyhkb21haW5zVG9CbG9jaywgW2NhbGxiYWNrQWdncmVnYXRvciA9
IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKCkgeyB9KTsKICAgICB9KTsKIH0KIApAQCAt
Nzk0LDE0ICs5MDAsMTkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNj
aGVkdWxlQ2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdAogICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZnJv
bSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBw
b3N0VGFzayhbdGhpcywgZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSAm
JiAhbV9kYXRhYmFzZVN0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoZG9tYWlu
cywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOworCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3Rv
cmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRv
bWFpbnMoZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldKCkgeyB9KTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAg
ICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoZG9tYWlu
cywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKCkg
eyB9KTsKICAgICB9KTsKIH0KIApAQCAtODEyLDIyICs5MjMsMzYgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQo
U2hvdWxkR3IKICAgICAgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCiAgICAgICAgICAgICBt
X3BlcnNpc3RlbnRTdG9yYWdlLT5jbGVhcigpOwogCi0gICAgICAgIENvbXBsZXRpb25IYW5kbGVy
Q2FsbGluZ1Njb3BlIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoIW1f
bWVtb3J5U3RvcmUgJiYgIW1fZGF0YWJhc2VTdG9yZSkgeworICAgICAgICAgICAgaWYgKHNob3Vs
ZEdyYW5kZmF0aGVyID09IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQg
QmVmb3JlIGJlaW5nIGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUgYW5kIG1fZGF0YWJhc2VTdG9yZSBh
cmUgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOworCisgICAgICAgICAg
ICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Q2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKSB7Ci0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhcihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBzaG91bGRHcmFuZGZh
dGhlciwgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
Q2FsbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpIHsKKyAg
ICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBw
cm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNhbGxiYWNrQWdncmVn
YXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldICgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRp
c3RpY3M6OlllcykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5ncmFuZGZhdGhlckV4aXN0
aW5nV2Vic2l0ZURhdGEoW2NhbGxiYWNrQWdncmVnYXRvciA9IFdURk1vdmUoY2FsbGJhY2tBZ2dy
ZWdhdG9yKV0oKSBtdXRhYmxlIHsgfSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9kYXRhYmFzZVN0b3JlIGlzIG51bGwgd2hl
biB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX21lbW9yeVN0b3JlKSB7CisgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5jbGVhcihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3Rl
ZFRoaXMuY29weVJlZigpLCBzaG91bGRHcmFuZGZhdGhlciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0g
Y2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6
WWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVE
YXRhKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW2Nh
bGxiYWNrQWdncmVnYXRvciA9IFdURk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKV0oKSBtdXRhYmxl
IHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQgQWZ0ZXIgYmVp
bmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0
aGVyIGRhdGEuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3Jh
bmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpCi0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVz
b3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2No
ZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBCZWZvcmUgYmVpbmcgY2xlYXJlZCwgbV9t
ZW1vcnlTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CiAg
ICAgICAgIH0KICAgICB9KTsKIH0KQEAgLTg0NSw3ICs5NzAsOSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRz
IHNlY29uZAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2so
W3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBp
ZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKHNlY29uZHMpOworICAgICAgICBlbHNlIGlmIChtX21lbW9y
eVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbihzZWNvbmRzKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC04NTUsNyArOTgyLDkgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbChTZWMKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNr
KFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAg
IGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKKyAgICAgICAgZWxz
ZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChzZWNvbmRzKTsKIAogICAgICAgICBwb3N0
VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTg2Niw3ICs5OTUsOSBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdU
aW1lKFNlY29uZHMgc2Vjb25kcywgQ29tcAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAgICAgcG9zdFRhc2soW3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0
YWJhc2VTdG9yZS0+c2V0R3JhbmRmYXRoZXJpbmdUaW1lKHNlY29uZHMpOworICAgICAgICBlbHNl
IGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0R3JhbmRm
YXRoZXJpbmdUaW1lKHNlY29uZHMpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwpAQCAtOTExLDcgKzEwNDIsOSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGlt
dW1FbnRyeQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2so
W3RoaXMsIG1heGltdW1FbnRyeUNvdW50LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUp
CisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3Rv
cmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1heGltdW1FbnRyeUNvdW50KTsKKyAgICAgICAg
ZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzKG1heGltdW1FbnRyeUNvdW50KTsKIAogICAgICAgICBwb3N0VGFz
a1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTkyMyw3ICsxMDU2LDkgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25U
byhzaXplX3QgcHJ1bmVUYXJnZXRDb3UKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
CiAgICAgcG9zdFRhc2soW3RoaXMsIHBydW5lVGFyZ2V0Q291bnQsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBpZiAo
bV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAg
IG1fZGF0YWJhc2VTdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFyZ2V0Q291bnQp
OworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFyZ2V0Q291bnQpOwogCiAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtOTM1LDcgKzEw
NzAsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzZXRQYXJhbWV0
ZXJzVG9EZWZhdWx0VmFsdWVzKENvbXBsZXRpb25IYQogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNl
U3RvcmUtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgICAgICBlbHNlIGlm
IChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVzZXRQYXJhbWV0
ZXJzVG9EZWZhdWx0VmFsdWVzKCk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgKaW5kZXggMTFjMDBjYTg1ZDE2OTcxMGI2OTkwYjQxOWI0NDM4YTkyYWU4OTFkYy4u
YThkMDQ4MDBiYjI1OWIzYTAwZjEwYjAyM2ZhOWNlZDcwYzJkNTU2YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtNTEsNiArNTEsNyBAQCBlbnVt
IGNsYXNzIFNob3VsZFNhbXBsZSA6IGJvb2w7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
TmV0d29ya1Nlc3Npb247CitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTsKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKIGNsYXNzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKIGNsYXNzIFdlYkZyYW1lUHJveHk7
CkBAIC0xNzQsNiArMTc1LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8V29ya1F1ZXVlPiBtX3N0YXRp
c3RpY3NRdWV1ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlPiBtX21lbW9yeVN0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPiBtX2Rh
dGFiYXNlU3RvcmU7CiAKICAgICBSdW5Mb29wOjpUaW1lcjxXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU+IG1fZGFpbHlUYXNrc1RpbWVyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDlmMWYwMDBkOThkN2JhNzNkMjRjMTgx
ZmI0MWJlMTRiNTgzNWUyYjYuLjU1MjM3ZGUxMmM0NjdmMDQ4OTg2YjhiNWQ0NTM3M2NjYWZmZTBh
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY2hlbWVSZWdpc3Ry
eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8
d3RmL0FsZ29yaXRobXMuaD4KQEAgLTMyNiw2ICszMjcsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmJgogICAgIH0KICNlbmRpZgogCisgICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJdHBEYXRhYmFzZU1vZGVFbmFibGVkKHBhcmFtZXRlcnMu
c2hvdWxkRW5hYmxlSXRwRGF0YWJhc2VNb2RlKTsKKwogICAgIGF1dG8qIGRlZmF1bHRTZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUgOiBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQ
YXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzKQogICAgICAgICBkZWZhdWx0U2Vzc2lvbi0+bmV0d29y
a1N0b3JhZ2VTZXNzaW9uKCkuc2V0Q29va2llKGNvb2tpZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwCmluZGV4IGM2ZGYwOGU5ZmI3NzY2Zjc3MGFmYWRlZjFhYTdmMjEyOTQ5ZDFm
NTUuLjZkM2E1MmFlM2RkYjJiYjI5MGFhNzVmYjY2ZjQzMTQxYWFiMzdlNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC05Myw2ICs5Myw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNv
bnN0CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGVuY29kZXIgPDwgc2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGly
ZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8IHVybFNjaGVtZXNTZXJ2aWNlV29ya2Vyc0NhbkhhbmRs
ZSA8PCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5Owog
I2VuZGlmCisgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVJdHBEYXRhYmFzZU1vZGU7CiB9CiAK
IGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29k
ZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBA
IC0yMTcsNiArMjE4LDkgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogI2VuZGlmCiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRF
bmFibGVJdHBEYXRhYmFzZU1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDJmZDNiZTlm
ZGVkOTgwYjc1NzNjZTNiNTE2YjA3YTk2ZmFkYWY3M2IuLjUzMmNlZjM4ODQ0YzhmNzJiYmI3NGQz
MTE1OWI5YzRiMzMyMjE2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTEx
MSw2ICsxMTEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewog
ICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZTsKICAg
ICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkg
eyBmYWxzZSB9OwogI2VuZGlmCisgICAgYm9vbCBzaG91bGRFbmFibGVJdHBEYXRhYmFzZU1vZGUg
eyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAppbmRleCBiZGJmZGZjMjA1MWM2ZjQ0ODc3NDlkMGZi
NGRiNzBkMGNlYjcyN2E5Li4wNTBjODUxNGQ4ZjdkYTcwMjkwYjNiMDczMTExY2I1OWI3Yzg3OTY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
Y2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcs
MTIgQEAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
Zmllcjo6Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWwKICAgICBhdXRvIHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9Db3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8uc2l6ZSgpOwogICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0Nv
dW50ID0gcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucy5zaXpl
KCk7CiAgICAgYXV0byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSByZXNvdXJjZVN0
YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKTsKLSAgICAKKworICAgIHJl
dHVybiBjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2Uoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
T3JpZ2luc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHN1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50
LCBjdXJyZW50UHJldmFsZW5jZSk7Cit9CisKK1Jlc291cmNlTG9hZFByZXZhbGVuY2UgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZSh1
bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291
bnQsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY3VycmVudFByZXZhbGVuY2UpCit7CiAgICAgaWYg
KCFzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQKICAgICAgICAgJiYgIXN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudAogICAgICAgICAmJiAhc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc0NvdW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5o
CmluZGV4IGFjZjFmMzg5ZGQ1MWEwMGM1MTA3ZGM2NzJmOWQzZmJhOWYyYmZlZjAuLmFmM2UyMzRj
MGI2MTNkZGZkMDA1YWU2MDkwZTkyMzA0NWYyNTE1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgflJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyKCkgPSBkZWZhdWx0OwogICAgIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2UgY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlIGN1cnJlbnRQcmV2YWxlbmNlKTsKKyAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGNhbGN1
bGF0ZVJlc291cmNlUHJldmFsZW5jZSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwg
dW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCB0b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY3VycmVu
dFByZXZhbGVuY2UpOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNp
Z25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luc0NvdW50KQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByZWZlcmVuY2VzLnlhbWwgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNl
cy55YW1sCmluZGV4IDc0YTEyMmM1Yjc3ZmM1ZDQxYTI4ODkxY2EwYTUzZGY1ZGVjOWZhZmUuLjc0
YzllMWY5NjU2ZmJlZjBmMDZlOGUxYzI4MzQwZTU1YjFhNjFjNGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbApAQCAtMTM4Myw2ICsxMzgzLDE0IEBAIEl0cERlYnVn
TW9kZUVuYWJsZWQ6CiAgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkludGVsbGlnZW50IFRy
YWNraW5nIFByZXZlbnRpb24gRGVidWcgTW9kZSIKICAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMKIAorSXRwRGF0YWJhc2VNb2RlRW5hYmxlZDoKKyAgdHlwZTogYm9vbAor
ICBkZWZhdWx0VmFsdWU6IGZhbHNlCisgIGh1bWFuUmVhZGFibGVOYW1lOiAiSVRQIERhdGFiYXNl
IEJhY2tlbmQgTW9kZSIKKyAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiSW50ZWxsaWdlbnQg
VHJhY2tpbmcgUHJldmVudGlvbiBEYXRhYmFzZSBCYWNrZW5kIE1vZGUiCisgIHdlYmNvcmVCaW5k
aW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCisgIGNhdGVnb3J5OiBpbnRlcm5hbAorCiBTZXJ2
aWNlV29ya2Vyc0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgZGVmYXVsdFZhbHVlOiBERUZBVUxU
X1NFUlZJQ0VfV09SS0VSU19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1OWNlZjgzYTUyMzllZWEw
Y2ExOTdmNjhjYjM3MjA2N2I5NzllMDI5Li4wNDM1YTk1MGVkZmQyYWU1MWM0M2FiZDgxZjA1MTk3
MjQ0ZWY3ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTQyLDggKzQyLDEwIEBAIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtTb2NrZXRTdHJlYW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKIE5l
dHdvcmtQcm9jZXNzL1ByZWNvbm5lY3RUYXNrLmNwcAogCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAogTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCiBOZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZS5jcHAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3Bw
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBjNDNlNGU1MDkwYmVkYzcxYzlkZTYzZjg2N2Y3
NDBhOTQxZmQwZjEyLi5jMDBmYTU3Yjk3ZGE5NmZiM2RhY2M3YjQ2MmRhMWQ0ZjQzNzFmZWJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yOSw2ICsyOSw3IEBAIE5ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
Lm1tCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlQ29jb2EubW0KIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogCkBAIC0zMzIsNyArMzMzLDYgQEAgVUlQcm9jZXNz
L0NvY29hL01lZGlhQ2FwdHVyZVV0aWxpdGllcy5tbQogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5tbQogVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KIFVJUHJv
Y2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KLVVJUHJvY2Vzcy9Db2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQogVUlQcm9jZXNzL0Nv
Y29hL1NhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1Nlc3Npb25T
dGF0ZUNvZGluZy5tbQogVUlQcm9jZXNzL0NvY29hL1N5c3RlbVByZXZpZXdDb250cm9sbGVyQ29j
b2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YmE4MzM2ZWZhNWQxN2FkNTBkZjk2NzAzNzA5ZjUz
ZDhhNmIxYmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlQ29jb2EubW0KKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5oIgotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
LQotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0ZXJVc2VyRGVm
YXVsdHNJZk5lZWRlZCgpCi17Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBpbml0T25jZTsK
LQotICAgIGRpc3BhdGNoX29uY2UoJmluaXRPbmNlLCBeewotICAgICAgICBTZWNvbmRzIHRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0
c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24iXSk7Ci0gICAgICAgIGlmICh0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID4gMF9z
ICYmIHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPD0gMjRfaCAqIDMwKQotICAgICAgICAgICAg
c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbih0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTsK
LQotICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChb
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIl0p
OwotICAgICAgICBpZiAobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID4gMF9z
ICYmIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA8IDFfaCkKLSAgICAgICAg
ICAgIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOwotCi0gICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJp
bmdUaW1lKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktl
eTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiXSk7Ci0gICAgICAg
IGlmIChncmFuZGZhdGhlcmluZ1RpbWUgPiAwX3MgJiYgZ3JhbmRmYXRoZXJpbmdUaW1lIDw9IDI0
X2ggKiA3KQotICAgICAgICAgICAgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKGdyYW5kZmF0aGVyaW5n
VGltZSk7Ci0KLSAgICAgICAgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiSXRwRGVidWdN
b2RlIl0pOwotICAgICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVudFJlc291cmNlIl07Ci0gICAgICAgIGlmIChk
ZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKQotICAgICAgICAgICAgc2V0UHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7Ci0KLSAgICAg
ICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhbW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiXSk7Ci0gICAgICAgIGlmIChjYWNoZU1heEFnZUNhcEZv
clByZXZhbGVudFJlc291cmNlcyA+IDBfcyAmJiBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyA8PSAyNF9oICogMzY1KQotICAgICAgICAgICAgc2V0Q2FjaGVNYXhBZ2VDYXAoY2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOwotICAgICAgICAKLSAgICAgICAgU2Vj
b25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNl
ckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xpZW50U2lk
ZUNvb2tpZXNBZ2VDYXAiXSk7Ci0gICAgICAgIGlmIChjbGllbnRTaWRlQ29va2llc0FnZUNhcCA+
IDBfcyAmJiBjbGllbnRTaWRlQ29va2llc0FnZUNhcCA8PSAyNF9oICogMzY1KQotICAgICAgICAg
ICAgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAp
OwotICAgIH0pOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggOTg3NDZjMzdjNTI0Yzg3
ODRiN2E2ZTgyNjY3NjY2NTE3NWY2ZmIwZC4uMzgwOGQ4OWM2ZjM5ZDk1MjJlYjZiMDQ4YzQyODM5
OWZiMDJhN2VkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0yOTYsNiArMjk2LDggQEAgdm9pZCBXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmEKICNpZiBFTkFCTEUoUFJPWElNSVRZX05FVFdPUktJTkcpCiAgICAgcGFyYW1ldGVy
cy53aXJlbGVzc0NvbnRleHRJZGVudGlmaWVyID0gbV9jb25maWd1cmF0aW9uLT53aXJlbGVzc0Nv
bnRleHRJZGVudGlmaWVyKCk7CiAjZW5kaWYKKworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxl
SXRwRGF0YWJhc2VNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXRwRGF0YWJh
c2VNb2RlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKIH0KIAogdm9pZCBX
ZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggMTNlM2UwYzc1ZmYyY2QzM2M1NTA0
NjdmNzEzMjg4MGE5ODBkNzAyNy4uYzg4NmYzMTU3ZDI5MjA4MmY1NzAzMGFkNzE5ODJjY2VkZTYz
MTdlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAt
ODYsNiArODYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVudGlt
ZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9MYW5n
dWFnZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MDUwZmRhZDZlZDE2OWVlMDg0
NmNlYjk4MGFkNTc5ZTNkNjczYzY3Li44YWEyZmE2MmQyZTAwZmI0MjVhYjBmM2E3MzhiYTNmYjAy
ODcyNGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTM1MjcsNiArMzUyNyw4IEBACiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAv
KiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJ
bnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NjJCNzQ4NDEyMEJCQTJE
MDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjEyMjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTdBMEQ3ODYyMjIwNzkxRUQwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA7IHBhdGggPSBDbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0ExNTA2NzIxREQ1NjI5ODAwMUY0QjU4IC8qIGNvbS5hcHBs
ZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSAiY29tLmFw
cGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9XZWJL
aXQyL2NvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiI7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTdBMUUyQTg0MUVFRkU4OEEwMDM3QTBFMCAvKiBBUElOb3Rp
ZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElO
b3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTNB
Q0UxQTFFRUVGNzhDMDBBODY0QTQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVuZGxlUGFn
ZUxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU0Niw2ICsz
NTQ4LDkgQEAKIAkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdBQjZFQTQ0MUVFQUFFMjMwMDAzN0IyQiAvKiBBUElJY29uRGF0YWJhc2VDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSWNvbkRhdGFiYXNlQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQjZFQTQ2MUVFQUI2QjAwMDAz
N0IyQiAvKiBBUElHZW9sb2NhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0FDRTgyRTcyMjFDQUUwNjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBQ0U4MkU4MjIxQ0FFMDcw
MDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsg
cGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTkyMjFERTcyMjAwMERBOTRDIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW07IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QUYyMzYxRTFFNzlBM0I0MDA0MzhBMDUgLyogV2ViRXJyb3JzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkVycm9ycy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTdBRjIzNjFGMUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjIyMUU3OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJvcnND
b2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVycm9y
c0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY5Niw3ICszNzAxLDYg
QEAKIAkJODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdl
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyRTFB
Njc3RDRBMDBDNjk3QzUgLyogV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODM3QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjYyMUE2
OEIzNDIwMDMwRjM4NiAvKiBBUElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBUElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyogX1dL
RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgzODkxQjZBMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMxOSw3ICs1MzIzLDYg
QEAKIAkJCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdl
clByb3h5LmggKi8sCiAJCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vz
c2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQlDREEyOUExRjFDQkVCNUZCMDA5
MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAotCQkJCTgzN0E2NjAw
MjBFMkFEODQwMEE5REJEOCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2Nv
YS5tbSAqLywKIAkJCQk1Q0E5ODU0QjIxMEJFQjczMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2Fy
bmluZ0NvY29hLm1tICovLAogCQkJCTFBMDAyRDQ3MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9u
U3RhdGVDb2RpbmcuaCAqLywKIAkJCQkxQTAwMkQ0NjE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lv
blN0YXRlQ29kaW5nLm1tICovLApAQCAtNjkyMSwxMCArNjkyNCwxNSBAQAogCQk3QTg0M0ExRDIx
RTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCAqLywKKwkJCQk3QTBENzg2MTIyMDc5MUVD
MDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLywKIAkJ
CQk3QUZCRDM2NDIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlLmNwcCAqLywKIAkJCQk3QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmggKi8sCiAJCQkJN0FGQkQzNjkyMUU1NDJFODAwNURC
QUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8sCiAJ
CQkJN0FGQkQzNjgyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZS5oICovLAorCQkJCTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAorCQkJCTdBQ0U4MkU3MjIxQ0FFMDYwMDBE
QTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk3QUNFODJFOTIy
MURFNzIyMDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8s
CiAJCQkJN0E0MUU5RkEyMUY4MURBQzAwQjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcy5oICovLAogCQkJCTdBM0ZFQ0ExMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNz
U3RhdHVzLmggKi8sCiAJCQkJN0E4NDNBMUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCkBAIC0xMDc5MCw3ICsxMDc5OCw2IEBACiAJCQkJ
MkQ5MTM0NDQyMTJDRjlGMDAwMTI4QUZEIC8qIE5ldHNjYXBlUGx1Z2luLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTJEOTJBNzk2MjEyQjZBREEwMEY0OTNGRCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVs
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDkxMzQ0NTIxMkNGOUYwMDAxMjhBRkQgLyogTmV0
c2NhcGVQbHVnaW5TdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNkJEMDU4NjYyMjBDRThD
MjAwMEJFRDVDIC8qIE5ldHdvcmtBZENsaWNrQXR0cmlidXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTFERDlGMjgxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyRjA2MEUxMTY1
NDMxODUwMEYzMjgxQiAvKiBOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4M0YgLyog
TmV0d29ya01ETlNSZWdpc3Rlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363032</attachid>
            <date>2019-02-26 16:03:25 -0800</date>
            <delta_ts>2019-02-26 21:28:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194867-20190226160324.patch</filename>
            <type>text/plain</type>
            <size>269241</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNmYmQxZDk3YjM2YmZl
MDAzMGM2OTY3MDM2Y2EzZDJkOWVhZWFjOC4uMzEwMjNhYWE2NWMyYWRhZmFiOWY4ZTFkODA1YWUw
OWJiNGUzMGE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBv
cnQgdXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxz
byBleHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdl
YkNvcmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRh
YmFzZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIw
MTktMDItMjUgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAg
SW50cm9kdWNlIGFuZCBhZG9wdCBuZXcgY2xhc3MgUmVnaXN0cmFibGVEb21haW4gZm9yIGVUTEQr
MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAyYWJjNTE2MjAyODRlMDk4OTgzYjRkZWE0NmM5Zjc4MmZmNDQ0YzE0Li42
YWQwNTRmNWI2ZjRjNDM2Y2Y0YWUyMTE2YjI1ZjJhZTJmMzhkYjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4MyBAQAorMjAxOS0wMi0yMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgYSBTUUxpdGUgZGF0YWJhc2UgdG8gaG9sZCB0aGUgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTQ4NjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0MjQwODU0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIGRhdGFiYXNlIHBsaXN0IGlzIGluZWZmaWNpZW50LiBJdCByZXF1aXJl
cyBtb3JlIG1lbW9yeSB1c2UKKyAgICAgICAgdGhhbiBpdCBuZWVkcywgYW5kIGZvcmNlcyBsb3Rz
IG9mIGxvb3BpbmcgYW5kIHN0cmluZyBjb21wYXJpc29ucyB0byBmaW5kIGluZm9ybWF0aW9uLgor
CisgICAgICAgIFRoaXMgcHJvYmxlbSBoYXMgYWxyZWFkeSBiZWVuIHNvbHZlZCBpbiB0aGUgZm9y
bSBvZiByZWxhdGlvbmFsIGRhdGFiYXNlcy4gV2UgdXNlIHRoZW0KKyAgICAgICAgZWxzZXdoZXJl
IGluIFdlYktpdCwgYW5kIHNob3VsZCBkbyBzbyBmb3IgdGhpcyBzdG9yYWdlIGFzIHdlbGwuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBjcmVhdGVzIGFuIG9wdGlvbmFsIFNRTGl0ZSBkYXRhYmFzZSB0
byBoYW5kbGUgSVRQIG9wZXJhdGlvbnMuCisKKyAgICAgICAgMS4gSXQgYWRkcyBhIG5ldyBpbnRl
cm5hbCBleHBlcmltZW50YWwgZmVhdHVyZSBmbGFnIHRvIGFjdGl2YXRlIGl0LiBJdCByZXF1aXJl
cyB0aGUgdXNlcgorICAgICAgICAgICBleGl0IGFuZCByZXN0YXJ0IHRoZSBwcm9jZXNzIHRvIHRh
a2UgZWZmZWN0LgorICAgICAgICAyLiBJdCBwb3B1bGF0ZXMgaXRzZWxmIGZyb20gdGhlIGV4aXN0
aW5nIHBsaXN0IGZpbGUgKGlmIGl0IGV4aXN0cykuCisgICAgICAgIDMuIEl0IHN0b3BzIHVzaW5n
IHRoZSBwbGlzdCBpbiBmYXZvciBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgIDQuIEl0IGRvZXMg
cXVlcmllcyBhbmQgb3RoZXIgb3BlcmF0aW9ucyB1c2luZyB0aGUgZGF0YWJhc2UgaW5zdGVhZCBv
ZiB0aGUgb2xkIGhhc2ggdGFibGUKKyAgICAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAg
ICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGV4aXNpdGluZyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUgY2xhc3MgaW50byBhIGJhc2UKKyAgICAgICAgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlIGNsYXNzLCB3aGljaCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUgaXMgYmFzZWQgb24uCisgICAgICAgIEl0IGFkZHMgYSBuZXcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUgdGhhdCBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBTUUwKKyAg
ICAgICAgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGVzZSBjb2RlIGNoYW5nZXMgc2hvdWxkIG5v
dCBoYXZlIGFueSBpbXBhY3Qgb24gZXhpc3Rpbmcgb3BlcmF0aW9ucywgYW5kIHdoZW4gZW5hYmxl
ZAorICAgICAgICBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0ZXN0IHJlc3VsdHMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
cmVhdGVTY2hlbWEpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVudHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRp
b25zaGlwRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb25maXJtRG9tYWlu
RG9lc05vdEV4aXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0
ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRS
ZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
c1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6
bGlzdFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5j
U3RvcmFnZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2
YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291
cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1wUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVz
b3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0dyYW5kZmF0aGVyZWQgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4pOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXIpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2ll
VHJlYXRtZW50Rm9yT3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZG9tYWluc1RvQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRl
Q29va2llQmxvY2tpbmdGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJv
Y2Vzc1N0YXRpc3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJldmFsZW50RG9tYWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJlZFVz
ZXJJbnRlcmFjdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9ucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdy
YW5kZmF0aGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRl
RGF0YUZvcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vl
bik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JE
b21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3Jh
Z2VJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6
OmRvbWFpbnNUb1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0Rh
dGU6OmZyb21XYWxsVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0Rh
dGU6OnRvZGF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vj
b25kc1NpbmNlRXBvY2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3Bl
cmF0aW5nRGF0ZTo6b3BlcmF0b3I8IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGluZ0RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjptZXJnZU9wZXJhdGluZ0RhdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Y29t
cHV0ZUltcG9ydGFuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpw
cm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5n
V2Vic2l0ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzY2hlZHVsZVN0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVw
ZGF0ZUNhY2hlTWF4QWdlQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURh
dGFSZWNvcmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OmRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0YXRpc3RpY3NF
eHBpcmVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1
bmVFbnRyaWVzRG93blRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmxvZ1Rlc3RpbmdFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNEZWJ1Z01vZGVFbmFibGVkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVk
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6
CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZSk6CisgICAgICAg
IChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnRvZGF5KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0
aW5nRGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVy
YXRpbmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5n
RGF0ZTo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
b3BlcmF0b3I8PSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYWxjdWxh
dGVBbmRTdWJtaXRUZWxlbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNvbXB1dGVJbXBvcnRhbmNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxk
U3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlz
dGluZ1dlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNh
cCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0QWdl
Q2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVj
b3JkcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NFcGlyYXRpb25UaW1lIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZU9wZXJh
dGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGlu
Z0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZW1vdmVBbGxTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmguCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGluZ0RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RvcmUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29j
b2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRy
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdl
QWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRh
c2tzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjps
b2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3Vy
Y2VSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRM
YXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5k
ZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JE
b21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRy
aWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oOgorICAgICAgICAqIFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2xhc3NpZmllcjo6Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
Lmg6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogU291
cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAyLTI1ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBhbmQgYWRvcHQgbmV3IGNsYXNzIFJlZ2lz
dHJhYmxlRG9tYWluIGZvciBlVExEKzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgKaW5kZXggNzE3NmQyZmY2YmU3NzZiOThmOWMyNTRlY2FjODYxZmIwYzAy
NjM3Yy4uNDY5MWM5MzllZDY0ZWVlMzRhODJiNzEwODk1Nzg1ODA0NjQzNTEzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFi
bGVkKSB7IG1faXRwRGVidWdNb2RlID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01v
ZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQg
c2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBtX2l0cERhdGFiYXNl
TW9kZSA9IGlzRW5hYmxlZDsgfQorICAgIGJvb2wgaXRwRGF0YWJhc2VNb2RlRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXRwRGF0YWJhc2VNb2RlOyB9CisKICAgICB2b2lkIHNldFJlc3RyaWN0
ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1Jlc3RyaWN0ZWRIVFRQ
UmVzcG9uc2VBY2Nlc3MgPSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHJlc3RyaWN0ZWRIVFRQUmVz
cG9uc2VBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzdHJpY3RlZEhUVFBSZXNwb25zZUFj
Y2VzczsgfQogCkBAIC0zNTEsNyArMzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgbW91c2Vtb3Zl
RXZlbnRIYW5kbGluZ1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX21v
dXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkOyB9CiAgICAgdm9pZCBz
ZXRNb3VzZW1vdmVFdmVudEhhbmRsaW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBtX21vdXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkID0g
aXNFbmFibGVkOyB9CiAjZW5kaWYKLSAgICAKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzJiBzaGFyZWRGZWF0dXJlcygpOwogCiBwcml2YXRlOgpAQCAt
NTM0LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21vdXNlbW92ZUV2ZW50SGFuZGxp
bmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCisgICAgYm9vbCBt
X2l0cERhdGFiYXNlTW9kZSB7IGZhbHNlIH07CisKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZl
ckRlc3Ryb3llZDxSdW50aW1lRW5hYmxlZEZlYXR1cmVzPjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggNTdkMmFkODY5ZDRkMjMxN2Fi
MDYzYjVkNmJhZTE0ZDllZjA5ZmE0Ni4uYzliMzEwMjQ0MjA3YmM3NjhmZWM5MjlmMDI1ZjA1NDZi
OTZiMDM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgdGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckFsbFRhYmxlcygp
OwotICAgIGludCBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IHJ1
blZhY3V1bUNvbW1hbmQoKTsKICAgICBpbnQgcnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7
CiAgICAgCiAgICAgYm9vbCB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGExOTNkOGMyNGIwYmQwMjQ5NjViYjEwNTQ0NjQyM2Ji
YzhmNWJmZTkuLmYzNjZjNzMwMmY0YmE1YTVmNGFjMWE2MWMxNjI2MzMxMzkzMmQzZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKQEAgLTc2LDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpOwogICAg
IFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBnZXRDb2x1bW5UZXh0KGludCBjb2wpOwotICAgIGRvdWJsZSBnZXRDb2x1bW5Eb3VibGUo
aW50IGNvbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgZG91YmxlIGdldENvbHVtbkRvdWJsZShpbnQg
Y29sKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgZ2V0Q29sdW1uSW50KGludCBjb2wpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGludDY0X3QgZ2V0Q29sdW1uSW50NjQoaW50IGNvbCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQwMjRiNWRkZGQzOGI3YThiNjVhNmM4MGUzMzIxMDM5MGI3NGIxNjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTU2NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9L
ZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgorI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQs
IC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
LCBOZXR3b3JrLCAiJXAgLSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hlY2tlcjo6IiBmbXQsIHRoaXMs
ICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoc2Vz
c2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1JfSUYoc2Vzc2lvbklELmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hl
Y2tlcjo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisKKy8qCisgLy8gRklYTUU6IEltcGxl
bWVudCBmb3IgRGF0YWJhc2UKK3N0cnVjdCBkYl9TdGF0aXN0aWNzTGFzdFNlZW4geworICAgIFN0
cmluZyB0b3BQcml2YXRlbHlPd25lZERvbWFpbjsKKyAgICBXYWxsVGltZSBsYXN0U2VlbjsKK307
CisKK3N0YXRpYyB2b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgc3RhdGlzdGljc01hcCwgVmVjdG9yPGRiX1N0YXRpc3Rp
Y3NMYXN0U2Vlbj4mIHN0YXRpc3RpY3NUb1BydW5lLCBzaXplX3QmIG51bWJlck9mRW50cmllc1Rv
UHJ1bmUpCit7CisgICAgaWYgKHN0YXRpc3RpY3NUb1BydW5lLnNpemUoKSA+IG51bWJlck9mRW50
cmllc1RvUHJ1bmUpIHsKKyAgICAgICAgc3RkOjpzb3J0KHN0YXRpc3RpY3NUb1BydW5lLmJlZ2lu
KCksIHN0YXRpc3RpY3NUb1BydW5lLmVuZCgpLCBbXShjb25zdCBkYl9TdGF0aXN0aWNzTGFzdFNl
ZW4mIGEsIGNvbnN0IGRiX1N0YXRpc3RpY3NMYXN0U2VlbiYgYikgeworICAgICAgICAgICAgcmV0
dXJuIGEubGFzdFNlZW4gPCBiLmxhc3RTZWVuOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMCwgZW5kID0gc3RkOjptaW4obnVtYmVyT2ZFbnRyaWVzVG9QcnVuZSwg
c3RhdGlzdGljc1RvUHJ1bmUuc2l6ZSgpKTsgaSAhPSBlbmQ7ICsraSwgLS1udW1iZXJPZkVudHJp
ZXNUb1BydW5lKQorICAgICAgICBzdGF0aXN0aWNzTWFwLnJlbW92ZShzdGF0aXN0aWNzVG9QcnVu
ZVtpXS50b3BQcml2YXRlbHlPd25lZERvbWFpbik7Cit9CisqLworCitSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUo
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVl
dWUsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgpCisgICAgOiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSkKKyAgICAsIG1fc3RvcmFnZURpcmVj
dG9yeVBhdGgoc3RvcmFnZURpcmVjdG9yeVBhdGggKyBTdHJpbmcoIi9vYnNlcnZhdGlvbnMuZGIi
KSkKKyAgICAsIG1fZGF0YWJhc2UobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZT4oKSkKKyAgICAsIG1fb2JzZXJ2ZWREb21haW5Db3VudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBDT1VOVCgqKSBGUk9N
IE9ic2VydmVkRG9tYWlucyJfcykpCisgICAgLCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVt
ZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdl
dCgpLCAiSU5TRVJUIElOVE8gT2JzZXJ2ZWREb21haW5zIChyZWdpc3RyYWJsZURvbWFpbiwgbGFz
dFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUs
IGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRz
UmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCB0
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKSBWQUxVRVMgKD8s
ID8sID8sID8sID8sID8sID8sID8sID8sID8pIl9zKSkKKyAgICAsIG1faW5zZXJ0VG9wTGV2ZWxE
b21haW5TdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1f
ZGF0YWJhc2UuZ2V0KCksICJJTlNFUlQgSU5UTyBUb3BMZXZlbERvbWFpbnMgVkFMVUVTICg/KSJf
cykpCisgICAgLCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBkb21haW5J
RCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQor
ICAgICwgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnNTdGF0ZW1lbnQobWFrZVVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJJTlNF
UlQgSU5UTyBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMgKGRvbWFpbklELCB0b3BM
ZXZlbERvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJfcykpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG8obWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJh
c2UuZ2V0KCksICJJTlNFUlQgSU5UTyBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChzb3VyY2VE
b21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3MpKQorICAgICwgbV90b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvRXhpc3RzKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyBBTkQgdG9Eb21h
aW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/KSkiX3MpKQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20obWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0
KCksICJJTlNFUlQgSU5UTyBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gKHRhcmdldERvbWFp
bklELCBmcm9tRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV90b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb21FeGlzdHMobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzRnJvbSBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gQU5EIGZyb21E
b21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/KSkiX3MpKQorICAgICwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNl
LmdldCgpLCAiSU5TRVJUIElOVE8gU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyAoc3ViRnJh
bWVEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX3N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbkV4aXN0cyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAx
IEZST00gU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyBXSEVSRSBzdWJGcmFtZURvbWFpbklE
ID0gPyBBTkQgdG9wRnJhbWVEb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3MpKQorICAgICwgbV9zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2lucyAoc3VicmVzb3VyY2VEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkg
U0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfcykpCisgICAgLCBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbkV4
aXN0cyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5n
ZXQoKSwgIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2lucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBBTkQgdG9wRnJhbWVEb21h
aW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/KSkiX3MpKQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdl
dCgpLCAiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3Vy
Y2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3MpKQorICAgICwgbV9zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJP
TSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQg
PSA/IEFORCB0b0RvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfcykpCisgICAgLCBtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbShtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJTlRPIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbSAoc3VicmVzb3VyY2VEb21haW5JRCwgZnJvbURvbWFpbklEKSBTRUxFQ1QgPywgZG9t
YWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJf
cykpCisgICAgLCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cyhtYWtlVW5p
cXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVD
VCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIFdI
RVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRv
bWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykp
Il9zKSkKKyAgICAsIG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudChtYWtlVW5p
cXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQor
ICAgICwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNlcnZlZERvbWFpbnMg
U0VUIGxhc3RTZWVuID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwg
bV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQor
ICAgICwgbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIGlzUHJldmFsZW50
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisg
ICAgLCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtYWtlVW5pcXVlUmVm
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNl
cnZlZERvbWFpbnMgU0VUIGlzVmVyeVByZXZhbGVudCA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zKSkKKyAgICAsIG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobWFr
ZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJT
RUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0
KCksICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDAsIGlzVmVyeVBy
ZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBk
YXRlSGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgaGFkVXNlckludGVyYWN0aW9uID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3Mp
KQorICAgICwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgaGFkVXNlcklu
dGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVNb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZVN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gPyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50KG1h
a2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9ID8gV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50KG1h
a2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAi
U0VMRUNUIGdyYW5kZmF0aGVyZWQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkU3RhdGVt
ZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdl
dCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNSZW1vdmVkID0gPyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVUaW1lc0FjY2Vz
c2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQobWFrZVVuaXF1ZVJl
ZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJh
Y3Rpb24gPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX3VwZGF0
ZVRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUElTdGF0ZW1lbnQo
bWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCks
ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9TdG9yYWdlQWNjZXNzQVBJID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQor
ICAgICwgbV9maW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudChtYWtlVW5pcXVlUmVm
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRVc2VySW50ZXJhY3Rpb24gPSAxIEFO
RCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA8ID8iX3MpKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmVnaXN0ZXJV
c2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHBhdGggPSBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLmlzb2xhdGVkQ29weSgpXSB7
CisgICAgICAgIGlmICghbV9kYXRhYmFzZS0+b3BlbihwYXRoKSkgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zLCBkYXRhYmFzZSBwYXRoOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yTXNnKCksIHBhdGgudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgYSB3b3JrZXJRdWV1ZSwg
dGhlIHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBiZSBjYWxsZWQgYnkgZGlmZmVyZW50
IHRocmVhZHMuCisgICAgICAgIG1fZGF0YWJhc2UtPmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsK
KworICAgICAgICBpZiAoIW1fZGF0YWJhc2UtPnRhYmxlRXhpc3RzKCJPYnNlcnZlZERvbWFpbnMi
KSkgeworICAgICAgICAgICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBwYXRoOiAle3B1YmxpY31zIiwgdGhp
cywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCksIHBhdGgudXRmOCgpLmRhdGEoKSk7CisjZW5k
aWYKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXByZXBh
cmVTdGF0ZW1lbnRzKCkpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKDVfcywgW3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpXSB7CisgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgIHdlYWtU
aGlzLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsKKyAgICB9KTsKK30KKworYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBm
YWxzZTsKKyAgICAKKyAgICBhdXRvJiBzdGF0ZW1lbnQgPSBjb25zdF9jYXN0PFNRTGl0ZVN0YXRl
bWVudCY+KG1fb2JzZXJ2ZWREb21haW5Db3VudC5nZXQoKSk7CisgICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0ID0gc3RhdGVtZW50LmdldENvbHVt
bkludCgwKSA/IGZhbHNlIDogdHJ1ZTsKKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBzdGF0
ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3Vs
dCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1
dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgT2JzZXJ2ZWREb21haW5zIChkb21haW5JRCBJTlRFR0VS
IFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURvbWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBD
T05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFMIE5PVCBOVUxMLCBoYWRVc2VySW50ZXJhY3Rpb24g
SU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgUkVBTCBOT1Qg
TlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ByZXZhbGVudCBJTlRFR0VS
IE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgZGF0YVJlY29yZHNS
ZW1vdmVkIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1Vz
ZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9TdG9yYWdlQWNjZXNzQVBJIElOVEVHRVIgTk9UIE5VTEwpOyIpKSB7CisgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYnNlcnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJh
c2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9k
YXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBUb3BMZXZlbERvbWFpbnMgKHRv
cExldmVsRG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgRk9SRUlHTiBLRVkodG9wTGV2ZWxE
b21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpKTsiKSkgeworICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wTGV2ZWxEb21haW5zIHRhYmxlIGlu
IGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv
LyBTdG9yYWdlIEFjY2VzcyBTdGF0aXN0aWNzLgorICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0
ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMg
KGRvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvcExldmVsRG9tYWluSUQgSU5URUdFUiBOT1Qg
TlVMTCBPTiBDT05GTElDVCBGQUlMLCBGT1JFSUdOIEtFWShkb21haW5JRCkgUkVGRVJFTkNFUyBP
YnNlcnZlZERvbWFpbnMoZG9tYWluSUQpLCBGT1JFSUdOIEtFWSh0b3BMZXZlbERvbWFpbklEKSBS
RUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSk7IikpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1l
T3JpZ2lucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gVG9wIEZyYW1lIFN0YXRpc3RpY3MuCisgICAgaWYgKCFtX2RhdGFi
YXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8gKHNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdFUiBO
T1QgTlVMTCwgRk9SRUlHTiBLRVkoc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxE
b21haW5zKHRvcExldmVsRG9tYWluSUQpLCBGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVO
Q0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSk7IikpIHsKKyAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJh
c2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb20gKHRhcmdldERvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21E
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBGT1JFSUdOIEtFWSh0YXJnZXREb21haW5JRCkgUkVG
RVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCksIEZPUkVJR04gS0VZKGZy
b21Eb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkp
OyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIC8vIFN1YmZyYW1lIFN0YXRpc3RpY3MuCisgICAgaWYgKCFt
X2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnMgKHN1YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJhbWVE
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBGT1JFSUdOIEtFWShzdWJGcmFtZURvbWFpbklEKSBS
RUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCksIEZPUkVJR04gS0VZKHRvcEZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpKTsi
KSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgU3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2lucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gU3VicmVzb3VyY2UgU3RhdGlzdGljcy4KKyAgICBpZiAo
IW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2lucyAoc3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0
b3BGcmFtZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIEZPUkVJR04gS0VZKHN1YnJlc291cmNl
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSwgRk9SRUlHTiBL
RVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxE
b21haW5JRCkpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVD
b21tYW5kKCJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVz
b3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5V
TEwsIEZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWRE
b21haW5zKGRvbWFpbklEKSwgRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNFUyBPYnNl
cnZlZERvbWFpbnMoZG9tYWluSUQpKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFzZSAo
JWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFi
YXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbSAoc3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9tYWlu
SUQgSU5URUdFUiBOT1QgTlVMTCwgRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVG
RVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpLCBGT1JFSUdOIEtFWShmcm9tRG9tYWlu
SUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSk7IikpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICAgICAgCisgICAgaWYgKG1fb2JzZXJ2ZWREb21haW5Db3VudC0+cHJl
cGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0VG9wTGV2
ZWxEb21haW5TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9k
b21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnNTdGF0ZW1lbnQtPnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb0V4aXN0cy0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzRnJvbS0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cy0+cHJlcGFyZSgpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMtPnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5F
eGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLT5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby0+cHJlcGFyZSgp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9F
eGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb20tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9z
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQt
PnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVQcmV2YWxlbnRSZXNv
dXJjZVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2lzUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+
cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2NsZWFyUHJldmFsZW50UmVzb3Vy
Y2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVI
YWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV91cGRhdGVNb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZVN0YXRl
bWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZUdyYW5kZmF0
aGVyZWRTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pc0dy
YW5kZmF0aGVyZWRTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV91cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJU3Rh
dGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fZmluZEV4cGlyZWRV
c2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
KSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVwYXJlU3Rh
dGVtZW50cyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRo
aXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
bnNlcnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBsb2FkU3Rh
dGlzdGljcykKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKGNvbmZpcm1Eb21haW5Eb2Vz
Tm90RXhpc3QobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4pKTsKKyNlbmRpZgorCisg
ICAgaWYgKG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGxvYWRT
dGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBsb2Fk
U3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50
KDMsIGxvYWRTdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmREb3VibGUoNCwgbG9h
ZFN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBv
Y2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudC0+YmluZEludCg1LCBsb2FkU3RhdGlzdGljcy5ncmFuZGZhdGhlcmVkKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+
YmluZEludCg2LCBsb2FkU3RhdGlzdGljcy5pc1ByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludCg3
LCBsb2FkU3RhdGlzdGljcy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoOCwgbG9h
ZFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludCg5LCBsb2FkU3RhdGlzdGlj
cy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24pICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5iaW5kSW50
KDEwLCBsb2FkU3RhdGlzdGljcy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdl
QWNjZXNzQVBJKSAhPSBTUUxJVEVfT0spIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0byBiaW5kLCBlcnJvciBt
ZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwor
I2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRvIGNvbW1pdCwgZXJyb3IgbWVz
c2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNl
bmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGludCByZXNldFJlc3VsdCA9IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRS
ZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWxhdGlvbnNoaXBFeGlzdHMoV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQsIHVuc2lnbmVkIGZpcnN0RG9tYWluSUQsIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0Cit7CisgICAgaWYgKHN0
YXRlbWVudC5iaW5kSW50KDEsIGZpcnN0RG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8
fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwgc2Vjb25kRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFpblJlbGF0aW9u
c2hpcFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIs
IHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdl
dCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCByZXN1bHQg
PSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gdHJ1ZSA6IGZhbHNlOworCisgICAgaW50IHJl
c2V0UmVzdWx0ID0gc3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJl
c3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRE
b21haW5SZWxhdGlvbnNoaXAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQsIHVu
c2lnbmVkIGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWUpCit7Cisg
ICAgaWYgKHN0YXRlbWVudC5iaW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDIsIHRvcEZyYW1lLnN0cmluZygpKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBM
QVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV9pbnNlcnREb21haW5SZWxhdGlv
bnNoaXBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMi
LCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
bnQgcmVzZXRSZXN1bHQgPSBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJl
c2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCisjaWZuZGVmIE5ERUJVRworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y29uZmlybURvbWFpbkRvZXNOb3RFeGlzdChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIGlmIChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRl
bWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1Eb21haW5Eb2VzTm90
RXhpc3QgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBj
b25zdF9jYXN0PFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSkubGFz
dEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAgICBpZiAobV9kb21haW5JREZy
b21TdHJpbmdTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIGludCBy
ZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5yZXNldCgpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0sp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHJlc2V0UmVzdWx0ID0g
bV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29u
c3QKK3sKKyAgICB1bnNpZ25lZCBkb21haW5JRCA9IDA7CisKKyAgICBpZiAobV9kb21haW5JREZy
b21TdHJpbmdTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRo
aXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgp
KS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBkb21haW5JRDsKKyAgICB9CisKKyAgICBkb21haW5JRCA9IG1fZG9t
YWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCk7CisKKyAgICBpbnQgcmVz
ZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAg
IAorICAgIHJldHVybiBkb21haW5JRDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBsb2FkU3RhdGlzdGljcykKK3sKKyAgICBhdXRvIHJlZ2lz
dHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURvbWFp
bik7CisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNz
LnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucykKKyAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwKG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zU3RhdGVtZW50
LmdldCgpLCByZWdpc3RyYWJsZURvbWFpbklELCBSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURv
bWFpbikpOworCisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0
aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pCisgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uZ2V0KCksIHJlZ2lzdHJhYmxl
RG9tYWluSUQsIFJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluLmtleSkpOworICAgIAor
ICAgIGZvciAoY29uc3QgYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgcmVnaXN0cmFibGVEb21haW5J
RCwgUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4ua2V5KSk7CisgICAgCisgICAgZm9y
IChjb25zdCBhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnMpCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuZ2V0KCksIHJlZ2lzdHJhYmxlRG9tYWluSUQsIFJl
Z2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluLmtleSkpOworICAgIAorICAgIGZvciAoY29u
c3QgYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmdldCgpLCByZWdpc3RyYWJsZURvbWFpbklELCBS
ZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbi5rZXkpKTsKKyAgICAKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgcmVnaXN0cmFibGVEb21haW5JRCwgUmVnaXN0
cmFibGVEb21haW4odG9wRnJhbWVEb21haW4ua2V5KSk7CisgICAgCisgICAgZm9yIChjb25zdCBh
dXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbSkKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tLmdldCgpLCByZWdpc3RyYWJsZURvbWFpbklELCBSZWdpc3Ry
YWJsZURvbWFpbih0b3BGcmFtZURvbWFpbi5rZXkpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtZW1vcnlTdG9yZSkKK3sKKyAgICBtX3dv
cmtRdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIHdlYWtNZW1vcnlTdG9yZSA9IG1ha2VXZWFrUHRyKG1l
bW9yeVN0b3JlKV0geworICAgICAgICBpZiAoIXdlYWtNZW1vcnlTdG9yZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoIWlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjb25zdCBhdXRvJiBzdGF0aXN0aWNzTWFwID0gd2Vha01lbW9yeVN0b3JlLT5k
YXRhKCk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01h
cCkKKyAgICAgICAgICAgIGluc2VydE9ic2VydmVkRG9tYWluKHN0YXRpc3RpYy52YWx1ZSk7CisK
KyAgICAgICAgLy8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9yIGludGVyLWRvbWFpbiByZWxhdGlv
bnNoaXBzIHNvIHdlCisgICAgICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4g
dGFibGUgZW50cmllcworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRp
c3RpY3NNYXApCisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRpc3Rp
Yy52YWx1ZSk7CisKKyAgICAgICAgbV9kYXRhYmFzZS0+cnVuVmFjdXVtQ29tbWFuZCgpOworICAg
IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjYWxj
dWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgLy8gRklYTUUoV0lQKTogSW1wbGVtZW50IGZvciBEYXRhYmFzZSB2
ZXJzaW9uLgorICAgIC8vIGlmIChtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5KQor
ICAgIC8vICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVB
bmRTdWJtaXQoKnRoaXMpOworfQorCitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25z
dCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvIGRvbWFpbk5hbWUgOiBkb21haW5zKSB7CisgICAg
ICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXCIiKTsKKyAgICAg
ICAgYnVpbGRlci5hcHBlbmQoZG9tYWluTmFtZS5zdHJpbmcoKSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiXCIiKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOworfQorCitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGRvbWFpbnMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAo
YXV0byBkb21haW5OYW1lIDogZG9tYWlucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFp
bk5hbWUpOworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7CisgICAgfQorICAg
IAorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JE
b21haW5zKEhhc2hTZXQ8U3RyaW5nPiYmIGRvbWFpbnMpCit7CisgICAgU1FMaXRlU3RhdGVtZW50
IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jk
c1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJp
bmcoZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppbmNyZW1lbnRTdGF0aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Cisj
ZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit1bnNpZ25l
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1h
cnlEb21haW5JRCwgU3RkU2V0PHVuc2lnbmVkPiYgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPj0gbWF4
TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2spIHsKKyAgICAgICAgUkVM
RUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIkhpdCAldSByZWN1cnNpdmUgY2FsbHMg
aW4gcmVkaXJlY3QgYmFja3RyYWNlLiBSZXR1cm5pbmcgZWFybHkuIiwgbWF4TnVtYmVyT2ZSZWN1
cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2spOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxsczsKKyAgICB9CisgICAgCisgICAgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscysr
OworCisgICAgU3RkU2V0PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5zOworICAgIFNR
TGl0ZVN0YXRlbWVudCBmaW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VTdHJp
bmcoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZy
b20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21h
aW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ICIsIFN0cmlu
Zzo6bnVtYmVyKHByaW1hcnlEb21haW5JRCksICJBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFs
ZW50ID0gMCIpKTsKKyAgICBpZiAoZmluZFN1YnJlc291cmNlcy5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7CisgICAgICAgIHdoaWxlIChmaW5kU3VicmVzb3VyY2VzLnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XKSB7CisgICAgICAgICAgICBhdXRvIG5ld0RvbWFpbiA9IGZpbmRTdWJyZXNvdXJjZXMuZ2V0
Q29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxl
bnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0RvbWFpbik7CisgICAgICAgICAgICBpZiAo
aW5zZXJ0UmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21h
aW5zLmluc2VydChuZXdEb21haW4pOworICAgICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3Rh
dGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRhYmFzZS5nZXQoKSwgbWFrZVN0cmluZygiU0VMRUNU
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWRE
b21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5J
RCBXSEVSRSB0YXJnZXREb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHByaW1hcnlEb21haW5J
RCksICJBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCIpKTsKKyAgICBpZiAoZmlu
ZFRvcEZyYW1lcy5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChmaW5k
VG9wRnJhbWVzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBhdXRvIG5ld0Rv
bWFpbiA9IGZpbmRUb3BGcmFtZXMuZ2V0Q29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byBp
bnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0Rv
bWFpbik7CisgICAgICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAg
ICAgICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW4pOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKG5ld2x5SWRlbnRpZmllZERvbWFpbnMuZW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisKKyAgICBmb3IgKGF1dG8gZG9tYWlu
SUQgOiBuZXdseUlkZW50aWZpZWREb21haW5zKQorICAgICAgICBudW1iZXJPZlJlY3Vyc2l2ZUNh
bGxzID0gcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9U
aGlzRG9tYWluKGRvbWFpbklELCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHMpOworCisgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7
Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IFN0ZFNldDx1bnNpZ25lZD4mIHZh
bHVlcykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvIGRvbWFp
bklEIDogdmFsdWVzKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIo
ZG9tYWluSUQpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJ
Zkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+IHByZXZhbGVudER1ZVRvUmVkaXJlY3Q7Cisg
ICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQoY29uc3RfY2Fz
dDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCAiU0VMRUNUIERJU1RJTkNUIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWRE
b21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklE
IEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVz
b3VyY2VSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAg
IHdoaWxlIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KQorICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQoc3VicmVzb3VyY2VS
ZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0ZVN0
YXRlbWVudCB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJh
c2UmPihtX2RhdGFiYXNlLmdldCgpKSwgIlNFTEVDVCBESVNUSU5DVCBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvLnNvdXJjZURvbWFpbklEIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBK
T0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvLnRvRG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZh
bGVudCA9IDEiX3MpOworICAgIGlmICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUo
KSA9PSBTUUxJVEVfT0spIHsKKyAgICAgICAgd2hpbGUgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGly
ZWN0Lmluc2VydCh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7Cisg
ICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQoY29uc3Rf
Y2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCBtYWtlU3RyaW5nKCJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4g
KCIsIGJ1aWxkTGlzdChwcmV2YWxlbnREdWVUb1JlZGlyZWN0KSwgIikiKSk7CisgICAgaWYgKG1h
cmtQcmV2YWxlbnRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
YXJrUHJldmFsZW50U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRp
cmVjdGVkVG9QcmV2YWxlbnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVycm9yIG1lc3NhZ2U6ICV7cHVi
bGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitzdGF0aWMgU3RyaW5nIGxpc3RU
b1N0cmluZyhWZWN0b3I8dW5zaWduZWQ+IHZhbHVlcykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CisgICAgZm9yIChhdXRvIHZhbHVlIDogdmFsdWVzKSB7CisgICAgICAgIGlmICghYnVp
bGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVu
dFJlc291cmNlcygpCit7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJl
c291cmNlcz4gcmVzdWx0czsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBub3RWZXJ5UHJldmFsZW50
UmVzb3VyY2VzU3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNl
LmdldCgpKSwgIlNFTEVDVCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAg
IGlmIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGtleSA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZh
bHVlKHsgUmVnaXN0cmFibGVEb21haW4obm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVu
dC5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJl
c291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
OjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93CisgICAgICAgICAgICAgICAgLCAw
LCAwLCAwLCAwIH0pOworICAgICAgICAgICAgcmVzdWx0cy5hZGQoa2V5LCB2YWx1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRv
IHZhbHVlIDogcmVzdWx0cy5rZXlzKCkpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmROdW1iZXIodmFsdWUpOworICAgIH0KKworICAgIGF1dG8gZG9tYWluSURzT2ZJ
bnRlcmVzdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnRTdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxp
dGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAg
aWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJl
KCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+
dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50ID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudChjb25zdF9jYXN0PFNR
TGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJy
ZXNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJ
bnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQg
ZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9
IHJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luc0NvdW50U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFi
YXNlLmdldCgpKSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291cmNlRG9tYWluSUQsIENPVU5U
KHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucyBX
SEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVyZXN0LCAiKSBH
Uk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChzdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAg
ICAgICB3aGlsZSAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnRTdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0
cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQo
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0
ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCBtYWtl
U3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWlu
SURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRF
X09LKSB7CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0
ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFp
bklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBy
ZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRz
LmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgYXV0byBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmlu
ZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2VT
dGF0aXN0aWMgOiBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CisgICAgICAg
IGF1dG8gbmV3UHJldmFsZW5jZSA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIu
Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9w
RnJhbWVPcmlnaW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSk7CisgICAgICAgIGlmIChu
ZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3RhdGlzdGljLnByZXZhbGVuY2UpCisgICAgICAgICAg
ICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RlcmFibGVEb21h
aW4sIG5ld1ByZXZhbGVuY2UpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQoreworICAgIGVu
c3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIG1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgcmVjbGFzc2lmeVJlc291cmNlcygp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3Rv
cmFnZUlmTmVlZGVkKCkKK3sKKyAgICBtX2RhdGFiYXNlLT5ydW5WYWN1dW1Db21tYW5kKCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9yYWdl
SW1tZWRpYXRlbHkoKQoreworICAgIG1fZGF0YWJhc2UtPnJ1blZhY3V1bUNvbW1hbmQoKTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFj
Y2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlE
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAg
IHN3aXRjaCAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAg
IGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOgorICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRy
ZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwOgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0
cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpB
bGxvdzoKKyAgICAgICAgLy8gRG8gbm90aGluZworICAgICAgICBicmVhazsKKyAgICB9OworCisg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHN1
YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9t
YWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHN1YkZy
YW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIFtzdG9y
ZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJl
cXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZy
YW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJhbWVJRCwgUGFnZUlEIHBhZ2VJ
RCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nl
c3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIHN3aXRj
aCAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAgIGNhc2Ug
Q29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOiB7CisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFi
bGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBh
Y2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGly
ZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFzIG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9u
IGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworI2VuZGlmCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6
OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwOiB7CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdF
bmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJObyBuZWVkIHRvIGdyYW50IHN0
b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9j
a2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VB
Y2Nlc3NTdGF0dXM6Okhhc0FjY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxvdzoKKyAgICAgICAgLy8gRG8gbm90aGlu
ZworICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRFYXJs
aWVyID0gcHJvbXB0RW5hYmxlZCAmJiBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdo
UHJvbXB0KHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgIGlmIChw
cm9tcHRFbmFibGVkICYmICF1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdF
bmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVz
ZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9
cyB1bmRlciAle3B1YmxpY31zIG9yIG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyNlbmRp
ZgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJl
c1VzZXJQcm9tcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVzZXJXYXNQ
cm9tcHRlZEVhcmxpZXIpIHsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgUkVM
RUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1ZywgIlN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICV7cHVibGljfXMgdW5k
ZXIgJXtwdWJsaWN9cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0
b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIFNRTGl0ZVN0YXRlbWVudCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UuZ2V0
KCksIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgPSB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBh
cnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJICsgMSBXSEVSRSBkb21haW5JRCA9ICIsIFN0cmluZzo6
bnVtYmVyKHN1YkZyYW1lU3RhdHVzLnNlY29uZCkpKTsKKyAgICBpZiAoaW5jcmVtZW50U3RvcmFn
ZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGluY3JlbWVudFN0b3Jh
Z2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyBmYWlsZWQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Cisj
ZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIGdy
YW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3Zl
KHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVy
LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKGJvb2wg
d2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdh
c0dyYW50ZWRBY2Nlc3MgPyBTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MgOiBTdG9yYWdl
QWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKKyAgICB9KTsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NV
bmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiBkb21haW5Jbk5lZWRPZlN0
b3JhZ2VBY2Nlc3MsIE9wZW5lclBhZ2VJRCBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9w
ZW5lckRvbWFpbikKK3sKKyAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9
IG9wZW5lckRvbWFpbik7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBp
ZiAoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID09IG9wZW5lckRvbWFpbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKTsKKworICAgIGlmIChjb29raWVUcmVhdG1l
bnRGb3JPcmlnaW4oZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSAhPSBDb29raWVUcmVhdG1l
bnRSZXN1bHQ6OkFsbG93KQorICAgICAgICByZXR1cm47CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiW1RlbXBvcmFyeSBjb21iYXRpYmlsaXR5IGZpeF0g
U3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgZm9yICV7cHVibGljfXMgdW5kZXIgb3BlbmVyIHBh
Z2UgZnJvbSAle3B1YmxpY31zLCB3aXRoIHVzZXIgaW50ZXJhY3Rpb24gaW4gdGhlIG9wZW5lZCB3
aW5kb3cuIiwgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCksIG9wZW5lckRvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIGdy
YW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNj
ZXNzKSwgV1RGTW92ZShvcGVuZXJEb21haW4pLCBXVEY6Om51bGxvcHQsIG9wZW5lclBhZ2VJRCwg
ZmFsc2UsIFtdKGJvb2wpIHsgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1l
RG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlE
LCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vdykgeworICAgICAg
ICBhdXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0
dXMuZmlyc3QgPT0gQWRkZWRSZWNvcmQ6Ok5vKTsKKyAgICAgICAgQVNTRVJUKGhhc0hhZFVzZXJJ
bnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbikpOworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXAobV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnNTdGF0ZW1lbnQuZ2V0KCks
IHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgIH0KKworICAgIGdy
YW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3Zl
KHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21h
aW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgT3B0
aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0
ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2sp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3ViRnJhbWVE
b21haW4gPT0gdG9wRnJhbWVEb21haW4pIHsKKyAgICAgICAgY2FsbGJhY2sodHJ1ZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIG1fc3RvcmFnZUFjY2Vz
c1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBpcyBubyBsb25nZXIgZXhwZXJpbWVu
dGFsLgorICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIgJiYgbV9zdG9yYWdlQWNj
ZXNzUHJvbXB0c0VuYWJsZWQpIHsKKyAgICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsK
KyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09IEFkZGVkUmVjb3JkOjpObyk7
CisgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4pKTsK
KyAgICAgICAgQVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQo
c3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikpOworICAgICAgICBzZXRVc2Vy
SW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CisgICAg
fQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZy
YW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihtX3N0b3Jl
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3Rv
cmUtPmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFt
ZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
c3RvcmUgPSBzdG9yZS5jb3B5UmVmKCldKGJvb2wgdmFsdWUpIG11dGFibGUgeworICAgICAgICAg
ICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCB2YWx1ZV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2so
dmFsdWUpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZv
ckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7Cisg
ICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLmdl
dCgpLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVk
ID0gMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFp
bnMpLCAiKSIpKTsKKyAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVi
bGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxl
bnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQoreworICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVk
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMik7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworICAgIHNldFBy
ZXZhbGVudFJlc291cmNlKG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSwgUmVzb3VyY2VM
b2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tl
ZEFwcGVuZChtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworCisgICAgaWYgKCFtX2Rl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UuaXNFbXB0eSgpKSB7CisgICAgICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSk7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKG1fZGVidWdNYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAg
IHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAgICAgUkVMRUFT
RV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGlj
fXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1v
ZGUuIiwgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHByaW1hcnlEb21haW5zVG9CbG9jazsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVO
YXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHNvdXJjZURvbWFpbiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYm9vbCBhcmVUYXJnZXRBbmRUb3BG
cmFtZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFtZURvbWFpbjsKKyAg
ICBib29sIGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9
PSBzb3VyY2VEb21haW47CisKKyAgICBib29sIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IGZhbHNl
OworICAgIGlmICghaXNNYWluRnJhbWUgJiYgIShhcmVUYXJnZXRBbmRUb3BGcmFtZURvbWFpbnNT
YW1lU2l0ZSB8fCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUpKSB7CisgICAgICAg
IGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAgICAgdXBkYXRlTGFzdFNlZW4odGFyZ2V0RG9t
YWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1dGlvbihXYWxsVGlt
ZTo6bm93KCkpKTsKKworICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbkV4aXN0cy5nZXQoKSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgdG9w
RnJhbWVEb21haW4pKSB7CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9z
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmdldCgpLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCB0
b3BGcmFtZURvbWFpbik7CisgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzUmVkaXJlY3QgJiYgIWFyZVRhcmdldEFu
ZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkgeworICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdPcmlnaW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOworICAgICAgICAgICAg
aWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3Rz
LmdldCgpLCByZWRpcmVjdGluZ09yaWdpblJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbikpIHsK
KyAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvLmdldCgpLCByZWRpcmVjdGluZ09yaWdpblJlc3VsdC5zZWNvbmQsIHRhcmdl
dERvbWFpbik7CisgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOworICAg
ICAgICAgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21FeGlzdHMuZ2V0KCksIHRhcmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbikpIHsK
KyAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb20uZ2V0KCksIHRhcmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbik7
CisgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdPcmln
aW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
b3VyY2VEb21haW4pOworICAgICAgICAgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLmdldCgpLCByZWRpcmVjdGluZ09yaWdpblJl
c3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbikpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnREb21h
aW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldCgpLCByZWRp
cmVjdGluZ09yaWdpblJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbik7CisgICAgICAgICAgICAg
ICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOworICAgICAgICAgICAgaWYgKCFyZWxhdGlvbnNo
aXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMuZ2V0KCksIHRh
cmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbikpIHsKKyAgICAgICAgICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZ2V0
KCksIHRhcmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbik7CisgICAgICAgICAgICAgICAg
c3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCisgICAgICAgIHNjaGVkdWxl
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNv
bnN0IFN1YlJlc291cmNlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiB0b3BGcmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4pCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgdXBkYXRlTGFzdFNl
ZW4odGFyZ2V0RG9tYWluLCBsYXN0U2Vlbik7CisKKyAgICBhdXRvIHRhcmdldERvbWFpbklEID0g
cmVzdWx0LnNlY29uZDsKKyAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbkV4aXN0cy5nZXQoKSwgdGFyZ2V0RG9tYWluSUQsIHRvcEZyYW1l
RG9tYWluKSkgeworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmdldCgpLCB0YXJnZXREb21haW5JRCwgdG9wRnJhbWVEb21h
aW4pOworICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNz
YXJ5KCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiBz
b3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgdGFyZ2V0RG9tYWluKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzb3VyY2VEb21haW5S
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3Vy
Y2VEb21haW4pOworICAgIGF1dG8gdGFyZ2V0RG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKworICAgIGJvb2wg
aXNOZXdSZWRpcmVjdFRvRW50cnkgPSBmYWxzZTsKKyAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0
cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMuZ2V0KCksIHNvdXJjZURvbWFp
blJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgc291cmNlRG9t
YWluUmVzdWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgaXNOZXdSZWRpcmVjdFRv
RW50cnkgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgaXNOZXdSZWRpcmVjdEZyb21FbnRyeSA9
IGZhbHNlOworICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNGcm9tRXhpc3RzLmdldCgpLCB0YXJnZXREb21haW5SZXN1bHQuc2Vjb25kLCBzb3Vy
Y2VEb21haW4pKSB7CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgdGFyZ2V0RG9tYWluUmVzdWx0LnNlY29uZCwg
c291cmNlRG9tYWluKTsKKyAgICAgICAgaXNOZXdSZWRpcmVjdEZyb21FbnRyeSA9IHRydWU7Cisg
ICAgfQorCisgICAgaWYgKGlzTmV3UmVkaXJlY3RUb0VudHJ5IHx8IGlzTmV3UmVkaXJlY3RGcm9t
RW50cnkpCisgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNl
c3NhcnkoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJvb2wg
aGFkVXNlckludGVyYWN0aW9uLCBXYWxsVGltZSBtb3N0UmVjZW50SW50ZXJhY3Rpb24pCit7Cisg
ICAgaWYgKG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+YmluZEludCgxLCBo
YWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blN0YXRlbWVudC0+YmluZERvdWJsZSgyLCBtb3N0UmVjZW50SW50ZXJhY3Rpb24uc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9tb3N0UmVjZW50
VXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5iaW5kVGV4dCgzLCBkb21haW4uc3RyaW5nKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1l
bnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uLCBlcnJvciBtZXNzYWdlOiAle3B1Ymxp
Y31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50
IHJlc2V0UmVzdWx0ID0gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5yZXNl
dCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElU
RV9PSyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omxv
Z1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWluKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9t
YWluLCB0cnVlLCBXYWxsVGltZTo6bm93KCkpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOworICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIGZhbHNl
LCB7IH0pOworCisgICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZVN0b3JhZ2VBY2Nlc3MobV9kYXRh
YmFzZS5nZXQoKSwgbWFrZVN0cmluZygiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVPcmlnaW5zIFdIRVJFIGRvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIodGFyZ2V0UmVz
dWx0LnNlY29uZCkpKTsKKyAgICBpZiAocmVtb3ZlU3RvcmFnZUFjY2Vzcy5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMi
LCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGlmIChtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWls
ZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJy
b3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1f
aGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQoMCkgPyB0cnVlIDogZmFs
c2U7CisgICAgaWYgKCFoYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA9IFdhbGxU
aW1lOjpmcm9tUmF3U2Vjb25kcyhtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+Z2V0Q29s
dW1uRG91YmxlKDEpKTsKKworICAgIGlmIChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSkpIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2
ZSBkYXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIC8vIFNldCB0aW1l
c3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAgICAgIC8v
IGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCisgICAgICAg
IGNsZWFyVXNlckludGVyYWN0aW9uKGRvbWFpbik7CisgICAgICAgIGhhZFVzZXJJbnRlcmFjdGlv
biA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFkVXNlckludGVyYWN0aW9uOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBpZiAobV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+YmluZElu
dCgxLCAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+c3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVt
ZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0
ID09IFNRTElURV9PSyk7CisKKyAgICBpZiAobmV3UHJldmFsZW5jZSA9PSBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpWZXJ5SGlnaCkgeworICAgICAgICBpZiAobV91cGRhdGVWZXJ5UHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICB8fCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+YmluZFRleHQoMiwg
ZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IG1fdXBkYXRlVmVy
eVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX3VwZGF0ZVZlcnlQ
cmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZVZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNl
dFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICB9CisKKyAgICBTdGRTZXQ8
dW5zaWduZWQ+IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlczsKKyAgICByZWN1cnNpdmVs
eUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4oZG9tYWlu
SUQoZG9tYWluKSwgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCAwKTsKKyAgICBzZXRE
b21haW5zQXNQcmV2YWxlbnQoV1RGTW92ZShub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMp
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9t
YWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJiBkb21haW5zKQoreworICAgIFNRTGl0
ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZS5nZXQoKSwgbWFr
ZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJF
IGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21h
aW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBk
b21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQg
ZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgU3Rv
cmFnZUFjZXNzcworICAgIEFTU0VSVCgwKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4oV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50JiBwcmVkaWNhdGVTdGF0ZW1lbnQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisg
ICAgaWYgKHByZWRpY2F0ZVN0YXRlbWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBwcmVkaWNhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElU
RV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVk
aWNhdGVWYWx1ZUZvckRvbWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJs
aWN9cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFi
YXNlLmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlc3Vs
dCA9IHByZWRpY2F0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7Cisg
ICAgaW50IHJlc2V0UmVzdWx0ID0gcHJlZGljYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNT
RVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4p
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4g
cHJlZGljYXRlVmFsdWVGb3JEb21haW4obV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50Lmdl
dCgpLCBkb21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0
dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQuZ2V0KCksIGRvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNv
dXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BG
cmFtZURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW5FeGlzdHMuZ2V0KCksIGRvbWFpbklEKHN1YnJlc291cmNlRG9tYWluKSwgdG9wRnJhbWVE
b21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1l
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcmVsYXRpb25zaGlw
RXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLmdldCgpLCBkb21haW5J
RChzdWJGcmFtZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNv
bnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVk
aXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1f
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cy5nZXQoKSwgZG9tYWluSUQocmVkaXJl
Y3RlZEZyb21Eb21haW4pLCByZWRpcmVjdGVkVG9Eb21haW4pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihkb21haW4pOworICAgIAorICAgIGlmIChtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZh
bGVudFJlc291cmNlLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgY29uc3RfY2Fz
dDxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLmxhc3RFcnJvck1z
ZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2NsZWFyUHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3Vs
dCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
ZG9tYWluKTsKKyAgICAKKyAgICBpZiAobV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LT5i
aW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZh
dGhlcmVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9
cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNl
LmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0
ID0gbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNH
cmFuZGZhdGhlcmVkU3RhdGVtZW50LmdldCgpLCBkb21haW4pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURv
bWFpbiYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFr
ZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUg
ZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHRvcEZyYW1lRG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuZ2V0KCksIHJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9t
YWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBz
dWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURv
bWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUg
YSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KKyAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisK
KyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW5zLmdldCgpLCByZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNv
bnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOworCisgICAgLy8gRm9y
IGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBm
b3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxh
dGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLmdldCgpLCByZXN1bHQuc2Vj
b25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3Vy
ZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWlu
LgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGly
ZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4p
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWlu
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIC8vIEZv
ciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkg
Zm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgcmVzdWx0LnNlY29u
ZCwgcmVkaXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURv
bWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFp
bikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVE
b21haW4pOworCisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZl
IGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisK
KyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zy
b20uZ2V0KCksIHJlc3VsdC5zZWNvbmQsIHJlZGlyZWN0RG9tYWluKTsKK30KKworc3RkOjpwYWly
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgdW5zaWdu
ZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9t
YWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fZG9t
YWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9
IFNRTElURV9PSykgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y3JlYXRlU2NoZW1hIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCAwIH07CisgICAgfQor
ICAgIAorICAgIGlmIChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+c3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBtX2RvbWFpbklERnJvbVN0
cmluZ1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDApOworCisgICAgICAgIGludCByZXNldFJlc3Vs
dCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5yZXNldCgpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgICAg
ICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIGRvbWFpbklEIH07CisgICAgfQorCisgICAgaW50
IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
KworICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9tYWluKTsKKyAg
ICBpbnNlcnRPYnNlcnZlZERvbWFpbihuZXdPYnNlcnZhdGlvbik7CisKKyAgICByZXR1cm4geyBB
ZGRlZFJlY29yZDo6WWVzLCBkb21haW5JRChkb21haW4pIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7CisgICAgbV9vcGVyYXRp
bmdEYXRlcy5jbGVhcigpOworCisgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisKKyAgICBy
ZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3Jl
Z2F0b3IuY29weVJlZigpXSB7IH0pOworCisgICAgYXV0byBwcmltYXJ5RG9tYWluc1RvQmxvY2sg
PSBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICB1cGRhdGVDb29r
aWVCbG9ja2luZ0ZvckRvbWFpbnMocHJpbWFyeURvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKK30KKworUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OkNvb2tpZVRyZWF0bWVudFJlc3VsdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llVHJlYXRtZW50Rm9yT3JpZ2lu
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5n
ZXQoKSksIG1ha2VTdHJpbmcoIlNFTEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9u
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gIiwgZG9tYWlu
LnN0cmluZygpKSk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXR1
cm4gQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxvdzsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1ByZXZhbGVudCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7Cisg
ICAgaWYgKCFpc1ByZXZhbGVudCkKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3Vs
dDo6QWxsb3c7CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CisgICAgcmV0dXJuIGhhZFVzZXJJbnRlcmFjdGlv
biA/IENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwIDogQ29va2llVHJlYXRtZW50
UmVzdWx0OjpCbG9ja0FuZFB1cmdlOworfQorICAgIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21w
dCh1bnNpZ25lZCByZXF1ZXN0aW5nRG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBm
aXJzdFBhcnR5RG9tYWluKSBjb25zdAoreworICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21h
aW5JRCA9IGRvbWFpbklEKGZpcnN0UGFydHlEb21haW4pOworCisgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSks
IG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lT3JpZ2lucyBXSEVSRSBkb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHJlcXVlc3RpbmdE
b21haW5JRCksICIgQU5EIHRvcExldmVsRG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcihmaXJz
dFBhcnR5UHJpbWFyeURvbWFpbklEKSkpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDApID8gZmFsc2UgOiB0cnVlOworfQorCitWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5zVG9CbG9jaygpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IHJlc3VsdHM7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChjb25zdF9j
YXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksICJTRUxFQ1QgcmVnaXN0cmFi
bGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIl9zKTsK
KyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVy
biByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9S
T1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluKHN0YXRlbWVudC5n
ZXRDb2x1bW5UZXh0KDApKSk7CisKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBkb21haW5zVG9CbG9jayA9IHRoaXMt
PmRvbWFpbnNUb0Jsb2NrKCk7CisKKyAgICBpZiAoZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKSB7
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICYmICFkb21haW5zVG9CbG9jay5pc0VtcHR5
KCkpCisgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2siLCBkb21haW5zVG9C
bG9jayk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2NrID0g
Y3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxs
VXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9C
bG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlID0gc3RvcmUuY29weVJl
ZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3
ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBjb29raWUgYmxvY2tp
bmcuIik7CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJvY2Vzc1N0YXRp
c3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+
JiBwcm9jZXNzRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRp
c3RpY3NNYXAudmFsdWVzKCkpCisgICAgICAgIHByb2Nlc3NGdW5jdGlvbihyZXNvdXJjZVN0YXRp
c3RpYyk7Cit9CisKK1ZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
UHJldmFsZW50RG9tYWluRGF0YT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnByZXZhbGVudERvbWFpbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIAorICAgIFZlY3RvcjxQcmV2YWxlbnREb21haW5EYXRhPiByZXN1bHRzOworICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1f
ZGF0YWJhc2UuZ2V0KCkpLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRo
ZXJlZCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEiX3MpOworICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuIHJl
c3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbihzdGF0
ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSkKKyAgICAgICAgICAgICwgV2FsbFRpbWU6OmZyb21SYXdT
ZWNvbmRzKHN0YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoMikpCisgICAgICAgICAgICAsIHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoMykgPyB0cnVlIDogZmFsc2UKKyAgICAgICAgICAgICwgc3RhdGVt
ZW50LmdldENvbHVtbkludCg0KSA/IHRydWUgOiBmYWxzZQorICAgICAgICB9KTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK1ZlY3Rvcjx1bnNpZ25lZD4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9ucygp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBWZWN0b3I8
dW5zaWduZWQ+IHJlc3VsdHM7CisgICAgT3B0aW9uYWw8U2Vjb25kcz4gZXhwaXJhdGlvbkRhdGVU
aW1lID0gc3RhdGlzdGljc0VwaXJhdGlvblRpbWUoKTsKKyAgICBpZiAoIWV4cGlyYXRpb25EYXRl
VGltZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisKKyAgICBhdXRvJiBzdGF0ZW1lbnQgPSBj
b25zdF9jYXN0PFNRTGl0ZVN0YXRlbWVudCY+KG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25T
dGF0ZW1lbnQuZ2V0KCkpOworICAgIGlmIChzdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBleHBpcmF0
aW9uRGF0ZVRpbWUudmFsdWUoKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVy
biByZXN1bHRzOworCisgICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykK
KyAgICAgICAgcmVzdWx0cy5hcHBlbmQoc3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBleHBpcmVkUmVjb3JkcyA9IGZpbmRF
eHBpcmVkVXNlckludGVyYWN0aW9ucygpOworICAgIGlmIChleHBpcmVkUmVjb3Jkcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZXhwaXJlZFJlY29yZElEcyA9IGxpc3RU
b1N0cmluZyhleHBpcmVkUmVjb3Jkcyk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJFeHBp
cmVkSW50ZXJhY3Rpb24obV9kYXRhYmFzZS5nZXQoKSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSAwLCBoYWRVc2Vy
SW50ZXJhY3Rpb24gPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBleHBpcmVkUmVjb3JkSURzLCAi
KSIpKTsKKyAgICBpZiAoY2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24ucHJlcGFyZSgpICE9IFNRTElU
RV9PSykKKyAgICAgICAgcmV0dXJuOworCisgICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZVN0b3Jh
Z2VBY2Nlc3MobV9kYXRhYmFzZS5nZXQoKSwgbWFrZVN0cmluZygiREVMRVRFIEZST00gU3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zICIsIGV4cGlyZWRSZWNvcmRJRHMsICIpIikpOwor
ICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChjbGVhckV4cGlyZWRJbnRlcmFjdGlvbi5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omxv
Z1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9
cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYm
IGRvbWFpbklEc1RvQ2xlYXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAoZG9tYWluSURzVG9DbGVhci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudChtX2Rh
dGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFu
ZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvU3RyaW5nKGRvbWFpbklE
c1RvQ2xlYXIpLCAiKSIpKTsKKyAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGNs
ZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5n
IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRl
RGF0YUZvcigpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBib29s
IHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1l
c3RhbXAgPiBXYWxsVGltZTo6bm93KCk7CisgICAgYm9vbCBzaG91bGRDbGVhckdyYW5kZmF0aGVy
aW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgbV9lbmRPZkdyYW5kZmF0aGVy
aW5nVGltZXN0YW1wOworCisgICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcpCisgICAg
ICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsKKworICAgIGNsZWFyRXhw
aXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICAKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+IHByZXZhbGVudFJlc291cmNlczsKKworICAgIFZlY3RvcjxQcmV2YWxlbnREb21haW5EYXRh
PiBwcmV2YWxlbnREb21haW5zID0gdGhpcy0+cHJldmFsZW50RG9tYWlucygpOworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nOworICAgIGZvciAoYXV0
byYgc3RhdGlzdGljIDogcHJldmFsZW50RG9tYWlucykgeworICAgICAgICBpZiAoIXN0YXRpc3Rp
Yy5oYWRVc2VySW50ZXJhY3Rpb24gJiYgKCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8
ICFzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJj
ZXMuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RlcmFibGVEb21haW4pOworCisgICAgICAgIGlmIChz
aG91bGRDbGVhckdyYW5kZmF0aGVyaW5nICYmIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKQorICAg
ICAgICAgICAgZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nLmFwcGVuZChzdGF0aXN0aWMu
ZG9tYWluSUQpOworICAgIH0KKworICAgIGNsZWFyR3JhbmRmYXRoZXJpbmcoV1RGTW92ZShkb21h
aW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmcpKTsKKyAgICAKKyAgICByZXR1cm4gcHJldmFsZW50
UmVzb3VyY2VzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgYXV0byYgc3RhdGVtZW50ID0g
Y29uc3RfY2FzdDxTUUxpdGVTdGF0ZW1lbnQmPihtX29ic2VydmVkRG9tYWluQ291bnQuZ2V0KCkp
OworICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGNvdW50
ID0gc3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKworICAgIGludCByZXNldFJlc3VsdCA9IHN0
YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVz
dWx0ID09IFNRTElURV9PSyk7CisKKyAgICBpZiAoY291bnQgPD0gbV9wYXJhbWV0ZXJzLm1heFN0
YXRpc3RpY3NFbnRyaWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9wYXJhbWV0
ZXJzLnBydW5lRW50cmllc0Rvd25UbyA8PSBtX3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJp
ZXMpOworCisgICAgc2l6ZV90IG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gY291bnQgLSBt
X3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvOworICAgIEFTU0VSVChudW1iZXJPZkVudHJp
ZXNMZWZ0VG9QcnVuZSk7CisKKyAgICAvLyBGSVhNRShXSVApOiBJbXBsZW1lbnQgdmlhIGRhdGFi
YXNlCisgICAgQVNTRVJUKDApOworICAgIC8qCisgICAgVmVjdG9yPGRiX1N0YXRpc3RpY3NMYXN0
U2Vlbj4gcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbbWF4SW1wb3J0YW5jZSArIDFdOwor
ICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC52YWx1ZXMoKSkKKyAgICAgICAgcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbY29tcHV0
ZUltcG9ydGFuY2UocmVzb3VyY2VTdGF0aXN0aWMpXS5hcHBlbmQoeyByZXNvdXJjZVN0YXRpc3Rp
Yy5yZWdpc3RyYWJsZURvbWFpbiwgcmVzb3VyY2VTdGF0aXN0aWMubGFzdFNlZW4gfSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGltcG9ydGFuY2UgPSAwOyBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVu
ZSAmJiBpbXBvcnRhbmNlIDw9IG1heEltcG9ydGFuY2U7ICsraW1wb3J0YW5jZSkKKyAgICAgICAg
cHJ1bmVSZXNvdXJjZXMobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAsIHJlc291cmNlc1RvUHJ1bmVQ
ZXJJbXBvcnRhbmNlW2ltcG9ydGFuY2VdLCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7Cisg
ICAgKi8KKyAgICBBU1NFUlQoIW51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlTGFzdFNlZW4oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4pCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV91cGRhdGVMYXN0U2VlblN0
YXRlbWVudC0+YmluZERvdWJsZSgxLCBsYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVl
KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LT5i
aW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3Vw
ZGF0ZUxhc3RTZWVuU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuIGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRl
TGFzdFNlZW5TdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3Vs
dCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbiwgU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
ZG9tYWluKTsKKyAgICB1cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vj
b25kcyhzZWNvbmRzLnNlY29uZHMoKSkpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAg
ICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6Okhp
Z2gpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0UHJldmFsZW50UmVz
b3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGNmYzhlOTk4MGQzMGJi
ZDU4OTIxOGVmMTE3Mjg4ODFhMThmNDc2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZS5oCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgU1FMaXRlRGF0YWJhc2U7CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7Citz
dHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKKworLy8gVGhpcyBpcyBh
bHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUgOiBwdWJsaWMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIHsKK3B1YmxpYzoKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBTdHJpbmcm
IHN0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKworICAgIHZvaWQgcG9wdWxhdGVGcm9tTWVtb3J5U3Rv
cmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJik7CisKKyAgICB2b2lk
IGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0
OworCisgICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygp
IG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgpIG92ZXJyaWRlOworICAg
IHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpIG92ZXJyaWRlOworCisgICAgdm9pZCByZXF1
ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYm
LCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZ3Jh
bmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYp
IG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29u
c3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZyYW1l
RG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYs
IGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBj
bGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7
CisgICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
Ym9vbCB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3Vi
UmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3RE
b21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
KGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsK
KworICAgIHZvaWQgY2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VB
Y2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlE
LCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vz
c1N0YXR1cyk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZy
YW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdhdGVkVG9Eb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBib29s
IGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpIG92ZXJyaWRlOworICAgIHZvaWQgbG9nVXNl
ckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBs
b2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BG
cmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1N1
YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRp
cmVjdGVkVG9Eb21haW4mKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rp
b24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBib29sIGhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworCisgICAg
dm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNlY29uZHMpIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGJvb2wgaW5zZXJ0T2JzZXJ2ZWREb21haW4oY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
cyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBpbnNlcnREb21haW5S
ZWxhdGlvbnNoaXAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5zaWduZWQgZG9tYWluSUQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbik7CisgICAgYm9vbCByZWxh
dGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5zaWduZWQgZmlyc3RE
b21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgYm9vbCBjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisjZW5kaWYKKyAgICB2b2lkIHVwZGF0ZUxhc3RTZWVu
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgV2FsbFRpbWUpOworICAgIHZvaWQgc2V0VXNlcklu
dGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b24sIFdhbGxUaW1lKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Js
b2NrKCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgUHJldmFsZW50RG9tYWluRGF0YSB7CisgICAgICAg
IHVuc2lnbmVkIGRvbWFpbklEOworICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RlcmFi
bGVEb21haW47CisgICAgICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
OworICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICAgICAgYm9vbCBncmFuZGZh
dGhlcmVkOworICAgIH07CisgICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRhdGE+IHByZXZhbGVu
dERvbWFpbnMoKSBjb25zdDsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGZpbmRFeHBpcmVkVXNlcklu
dGVyYWN0aW9ucygpIGNvbnN0OworICAgIHZvaWQgY2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9u
cygpOworICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYpOwor
ICAgIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCh1bnNpZ25l
ZCBkb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICB2b2lkIGlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8U3RyaW5nPiYmKSBv
dmVycmlkZTsKKworICAgIHZvaWQgcmVjbGFzc2lmeVJlc291cmNlcygpOworICAgIHN0cnVjdCBO
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHsKKyAgICAgICAgUmVnaXN0cmFibGVEb21haW4gcmVn
aXN0ZXJhYmxlRG9tYWluOworICAgICAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIHByZXZhbGVu
Y2U7CisgICAgICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3Vu
dDsKKyAgICAgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50Owor
ICAgICAgICB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQ7CisgICAg
ICAgIHVuc2lnbmVkIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKKyAgICB9OworICAg
IEhhc2hNYXA8dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZpbmROb3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzKCk7CisKKyAgICBib29sIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWlu
KFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29u
c3Q7CisKKyAgICBlbnVtIGNsYXNzIENvb2tpZVRyZWF0bWVudFJlc3VsdCB7IEFsbG93LCBCbG9j
a0FuZEtlZXAsIEJsb2NrQW5kUHVyZ2UgfTsKKyAgICBDb29raWVUcmVhdG1lbnRSZXN1bHQgY29v
a2llVHJlYXRtZW50Rm9yT3JpZ2luKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7Cisg
ICAgCisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOworICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZWx5Rmlu
ZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1bnNpZ25lZCBw
cmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJlZGlyZWN0aW9u
U291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7CisgICAgdm9pZCBzZXRE
b21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmKTsKKyAgICB2b2lkIGdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIE9w
dGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVy
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIG1hcmtBc1ByZXZh
bGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxl
RG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisgICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIGVudW0g
Y2xhc3MgQWRkZWRSZWNvcmQgeyBObywgWWVzIH07CisgICAgc3RkOjpwYWlyPEFkZGVkUmVjb3Jk
LCB1bnNpZ25lZD4gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKSBvdmVycmlkZTsKKwor
ICAgIGJvb2wgY3JlYXRlU2NoZW1hKCk7CisgICAgYm9vbCBwcmVwYXJlU3RhdGVtZW50cygpOwor
ICAgIAorICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOworICAgIEhhc2hN
YXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+IG1fZGF0
YWJhc2U7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9vYnNlcnZl
ZERvbWFpbkNvdW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
aW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0YXRlbWVudDsKKyAgICBtdXRh
YmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZG9tYWluSURGcm9tU3Ry
aW5nU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
c3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVPcmlnaW5zU3RhdGVtZW50OworICAgIFVuaXF1ZVJl
ZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbzsK
KyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbTsKKyAgICBtdXRhYmxlIFVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tRXhpc3RzOworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3Rz
OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luczsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzOworICAg
IFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbzsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAgICBVbmlxdWVSZWY8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bTsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzOworICAgIFVuaXF1ZVJlZjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsK
KyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUxhc3RTZWVu
U3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBk
YXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7Cisg
ICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVWZXJ5UHJldmFs
ZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIFVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3Vw
ZGF0ZUhhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50Owor
ICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlTW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWVTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50OworICAgIG11dGFi
bGUgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc0dyYW5kZmF0aGVyZWRT
dGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRh
dGVEYXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4gbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNz
QVBJU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
ZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUuY3BwCmluZGV4IDMwMGMxNTE5ZTJmOTVlMTIwOWI3MDNiNGI5M2JhN2Yx
NGRjNDg2MWEuLmViNzgzM2E2ZDQ2YWY1ZGE2N2U5YTNkNTkzYjNjNzQ3YzQ3M2IzNGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCkBA
IC00OSw5NCArNDksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogCiBjb25zdGV4cHIgdW5zaWduZWQgc3RhdGlzdGljc01vZGVsVmVyc2lvbiB7IDE0IH07
Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RU
cmFjZUJhY2sgeyA1MCB9OwotY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9j
ZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRl
c1dpbmRvdyB7IDMwIH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsK
LQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJp
bmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKLXsKLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0g
ICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbi5zdHJpbmcoKSk7
Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotY2xh
c3MgT3BlcmF0aW5nRGF0ZSB7Ci1wdWJsaWM6Ci0gICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVs
dDsKLQotICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZyb21XYWxsVGltZShXYWxsVGltZSB0aW1l
KQotICAgIHsKLSAgICAgICAgZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1p
bGxpc2Vjb25kcygpOwotICAgICAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKLSAgICAgICAg
aW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIHllYXIpOwotICAgICAgICBpbnQgbW9udGggPSBt
b250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7Ci0gICAgICAgIGlu
dCBtb250aERheSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIo
eWVhcikpOwotCi0gICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlIHsgeWVhciwgbW9udGgsIG1v
bnRoRGF5IH07Ci0gICAgfQotCi0gICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgdG9kYXkoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6
bm93KCkpOwotICAgIH0KLQotICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFy
LCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkgfTsKLSAgICB9Ci0KLSAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5ICYmIG1fbW9udGgg
PT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOwotICAgIH0KLQotICAg
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VF
cG9jaCgpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRl
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgp
IDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE9w
ZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5KQotICAgICAgICA6
IG1feWVhcih5ZWFyKQotICAgICAgICAsIG1fbW9udGgobW9udGgpCi0gICAgICAgICwgbV9tb250
aERheShtb250aERheSkKLSAgICB7IH0KLQotICAgIGludCBtX3llYXIgeyAwIH07Ci0gICAgaW50
IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCi0gICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8v
IFsxLCAzMV0uCi19OwotCi1zdGF0aWMgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1lcmdlT3BlcmF0
aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBleGlzdGluZ0RhdGVzLCBWZWN0
b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykKLXsKLSAgICBpZiAoZXhpc3RpbmdEYXRlcy5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKG5ld0RhdGVzKTsKLQotICAgIFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUoKSArIG5ld0Rh
dGVzLnNpemUoKSk7Ci0KLSAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0b3JzIG9mIGRh
dGVzLgotICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBleGlzdGluZ0RhdGVz
LmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2VkRGF0ZXMuYmVn
aW4oKSk7Ci0gICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KLSAgICByZW1vdmVSZXBlYXRl
ZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKLQotICAgIC8vIERyb3Agb2xkIGRhdGVzIHVudGlsIHRo
ZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGluZ0RhdGVzV2luZG93LgotICAgIHdoaWxlICht
ZXJnZWREYXRlcy5zaXplKCkgPiBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLSAgICAgICAgbWVyZ2Vk
RGF0ZXMucmVtb3ZlKDApOwotCi0gICAgcmV0dXJuIG1lcmdlZERhdGVzOwotfQogCiBzdHJ1Y3Qg
U3RhdGlzdGljc0xhc3RTZWVuIHsKICAgICBSZWdpc3RyYWJsZURvbWFpbiBkb21haW47CkBAIC0x
NTUsMjYgKzY3LDE0IEBAIHN0YXRpYyB2b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8UmVnaXN0
cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzCiAgICAgICAgIHN0YXRpc3Rp
Y3NNYXAucmVtb3ZlKHN0YXRpc3RpY3NUb1BydW5lW2ldLmRvbWFpbik7CiB9CiAKLXN0YXRpYyB1
bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBy
ZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICB1bnNpZ25lZCBpbXBvcnRhbmNlID0gbWF4SW1wb3J0
YW5jZTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCi0g
ICAgICAgIGltcG9ydGFuY2UgLT0gMTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVz
ZXJJbnRlcmFjdGlvbikKLSAgICAgICAgaW1wb3J0YW5jZSAtPSAyOwotICAgIHJldHVybiBpbXBv
cnRhbmNlOwotfQotCiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUm
IHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKLSAgICA6IG1fc3RvcmUoc3RvcmUpCi0gICAg
LCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUoc3RvcmUsIHdvcmtRdWV1ZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQo
KTsKICNlbmRpZgotICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7
CiAKICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0gewogICAgICAgICBpZiAod2Vha1RoaXMpCkBAIC0xODIsOSArODIsOSBA
QCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZQogICAgIH0pOwogfQogCi1SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoKQor
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzRW1wdHkoKSBjb25zdAog
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHJldHVybiBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2UmIHBlcnNpc3RlbnRTdG9yYWdlKQpAQCAtMjAwLDc1ICsxMDAsMTIg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNhbGN1bGF0ZUFuZFN1
Ym1pdFRlbGVtZXRyeSgpIGNvbnN0CiAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7CiB9CiAKLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wgdmFsdWUpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxTdHJp
bmc+JiYgZG9tYWlucykKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBt
X3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9
IHZhbHVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0
U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1
ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMu
c2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB2YWx1ZTsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZFN1
Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkgPSB2YWx1ZTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZURhdGFSZWNv
cmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMo
KSkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYg
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xl
YXIoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkKLSAgICAgICAgbV9hY3RpdmVQbHVnaW5U
b2tlbnMuYWRkKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOwotI2VuZGlmCi0KLSAgICBh
dXRvIHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3Zl
V2Vic2l0ZURhdGFGb3IoKTsKLSAgICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1w
dHkoKSkgewotICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47CisgICAgZm9yIChh
dXRvJiBkb21haW4gOiBkb21haW5zKSB7CisgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbikpOworICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiAgICAg
fQotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRiht
X2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9yICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5n
KHByZXZhbGVudFJlc291cmNlRG9tYWlucykudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAg
IHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKHRydWUpOwotCi0gICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJl
dmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgY2FsbGJhY2so
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHdlYWtUaGlzLT5t
X3N0b3JlLmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zSW5BbGxQZXJzaXN0
ZW50RGF0YVN0b3JlcyhXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERh
dGFUeXBlcygpLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVl
dWUuY29weVJlZigpXShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFpbnNXaXRoRGVsZXRlZFdl
YnNpdGVEYXRhKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW2Rv
bWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNXaXRo
RGVsZXRlZFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1Ro
aXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCF3ZWFrVGhpcykgewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgZG9tYWluIDogZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGljID0gd2Vha1RoaXMtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKFJlZ2lzdHJhYmxlRG9tYWluIHsgZG9tYWlu
IH0pOwotICAgICAgICAgICAgICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5zZXREYXRhUmVj
b3Jkc0JlaW5nUmVtb3ZlZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkRvbmUgcmVtb3ZpbmcgZGF0YSByZWNvcmRzLiIpOwotI2VuZGlmCi0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CiB9CiAKIHVuc2lnbmVkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVS
ZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291
cmNlU3RhdGlzdGljLCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1RoYXRIYXZl
UmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdApAQCAt
MzM1LDQ3ICsxNzIsMzQgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2FkU3QKICAgICByZXR1cm4gcmVz
b3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gbV9kZWJ1Z1N0YXRpY1ByZXZhbGVu
dFJlc291cmNlIHx8IHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluID09IG1fZGVi
dWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3Vy
Y2VzKCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChtX3Bh
cmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwp
IHsKLSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoaXNQcmV2YWxlbnREdWVUb0Rl
YnVnTW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCi0gICAgICAgICAgICAgICAgc2V0UHJldmFsZW50
UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gp
OwotICAgICAgICAgICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVu
dFJlc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVj
dGVkVG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOwotICAgICAgICAgICAgICAgIGF1dG8g
Y3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNl
ID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkxvdzsKLSAgICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJj
ZVN0YXRpc3RpYywgY3VycmVudFByZXZhbGVuY2UpOwotICAgICAgICAgICAgICAgIGlmIChuZXdQ
cmV2YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQotICAgICAgICAgICAgICAgICAgICBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7Ci0gICAg
ICAgICAgICB9CisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChpc1ByZXZhbGVudER1ZVRvRGVi
dWdNb2RlKHJlc291cmNlU3RhdGlzdGljKSkKKyAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291
cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAg
ICAgICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNl
KSB7CisgICAgICAgICAgICBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVu
dChyZXNvdXJjZVN0YXRpc3RpYyk7CisgICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNl
ID0gcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFBy
ZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7CisgICAgICAgICAg
ICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
LmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYywgY3VycmVudFBy
ZXZhbGVuY2UpOworICAgICAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gY3VycmVudFByZXZh
bGVuY2UpCisgICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0
aXN0aWMsIG5ld1ByZXZhbGVuY2UpOwogICAgICAgICB9CiAgICAgfQorfQogCi0gICAgcmVtb3Zl
RGF0YVJlY29yZHMoW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSgpIG11dGFi
bGUgewotICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAgICAgaWYgKCF3
ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBwcnVuZVN0YXRpc3RpY3NJ
Zk5lZWRlZCgpOwotICAgICAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAg
IG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6Tm8p
OwotCi0gICAgICAgIGlmICghbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpXSgp
IHsKLSAgICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAgICAgICBp
ZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgICAgIHJldHVybjsKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzeW5jU3RvcmFnZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAo
bV9wZXJzaXN0ZW50U3RvcmFnZSkKKyAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2NoZWR1
bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9y
YWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpObyk7Cit9CiAKLSAgICAgICAgICAgIG1fc3RvcmUu
bm90aWZ5UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Byb2Nlc3NlZCgpOwotICAgICAgICB9KTsKLSAg
ICB9KTsKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzeW5jU3RvcmFn
ZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkKKyAgICAgICAg
bV9wZXJzaXN0ZW50U3RvcmFnZS0+c2NoZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpZZXMp
OwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFn
ZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8dWludDY0X3Q+IGZyYW1l
SUQsIHVpbnQ2NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpo
YXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29u
c3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBPcHRpb25hbDxGcmFtZUlEPiBmcmFt
ZUlELCBQYWdlSUQgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC0z
OTksNyArMjIzLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhh
c1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4KICAgICB9KTsKIH0KIAotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
KFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYg
dG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBw
cm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21h
aW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTQ0MCw3ICsyNjQsNyBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFi
bGVEb21haW4mJgogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihSZWdpc3RyYWJsZURvbWFp
biYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgdWludDY0X3Qgb3BlbmVyUGFnZUlELCBS
ZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbklu
TmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgT3BlbmVy
UGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3BlbmVyRG9tYWluKQogewogICAg
IEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3BlbmVyRG9tYWluKTsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTQ2MSw3ICsyODUsNyBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRl
ck9wZW5lcihSZWdpc3RyYQogICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUo
ZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJEb21haW4pLCBXVEY6
Om51bGxvcHQsIG9wZW5lclBhZ2VJRCwgZmFsc2UsIFtdKGJvb2wpIHsgfSk7CiB9CiAKLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MoUmVn
aXN0cmFibGVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgUmVnaXN0cmFibGVEb21haW4mJiB0b3BG
cmFtZURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJX
YXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0
b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21h
aW4mJiB0b3BGcmFtZURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBi
b29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApA
QCAtNDczLDcgKzI5Nyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpncmFudFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJiBzCiAgICAgZ3JhbnRTdG9y
YWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJh
bWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoUmVnaXN0cmFibGVEb21haW4mJiBz
dWJGcmFtZURvbWFpbiwgUmVnaXN0cmFibGVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9u
YWw8dWludDY0X3Q+IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0
ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2sp
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNj
ZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21h
aW4mJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBh
Z2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKQEAgLTQ5OSwzMCArMzIzLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChSZWdpc3RyYWJsZURvCiAgICAg
fSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZh
dGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxi
YWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVy
RGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMp
CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKSwgc3RvcmUgPSBtYWtlUmVm
KG1fc3RvcmUpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPnJlZ2lzdHJhYmxlRG9tYWlu
c1dpdGhXZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3Jl
ZERhdGFUeXBlcygpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
LCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxi
YWNrKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0gKEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiYgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICB3b3JrUXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBkb21h
aW5zV2l0aFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoKSBtdXRhYmxlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGljID0gd2Vha1RoaXMtPmVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcCA9IFdhbGxUaW1lOjpub3coKSArIHdlYWtUaGlzLT5tX3BhcmFtZXRlcnMuZ3JhbmRmYXRo
ZXJpbmdUaW1lOwotICAgICAgICAgICAgICAgIGlmICh3ZWFrVGhpcy0+bV9wZXJzaXN0ZW50U3Rv
cmFnZSkKLSAgICAgICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fcGVyc2lzdGVudFN0b3JhZ2Ut
PnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0
ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVzKTsKLSAgICAgICAgICAgICAgICBj
YWxsYmFjaygpOwotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5sb2dUZXN0aW5nRXZlbnQoIkdy
YW5kZmF0aGVyZWQiX3MpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwor
ICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBhdXRvJiBzdGF0aXN0
aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4p
OworICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7CisgICAgfQogfQogCiBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKQEAgLTU0OSw1NSArMzU1
LDYgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc28KICAgICByZXR1cm4gZG9tYWluc1RvQmxvY2s7
CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgaWYgKGVu
YWJsZSkKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJUdXJuZWQgSVRQIERlYnVnIE1vZGUgb24uIik7Ci0jZW5kaWYKLQotICAgIG1fZGVidWdN
b2RlRW5hYmxlZCA9IGVuYWJsZTsKLSAgICBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgPSBlbmFibGU7
Ci0KLSAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKLSAgICAvLyBU
aGlzIHdpbGwgbG9nIHRoZSBjdXJyZW50IGNvb2tpZSBibG9ja2luZyBzdGF0ZS4KLSAgICBpZiAo
ZW5hYmxlKQotICAgICAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQotewotICAgIG1f
ZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0SWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICsr
bV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKLSAgICBtX3dvcmtR
dWV1ZS0+ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCwg
W3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElkZW50aWZpZXJdIHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgIT0gc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikgewotICAgICAgICAg
ICAgLy8gVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOwot
ICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7Ci0gICAgfSk7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgPSBXVEY6Om51bGxvcHQ7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdl
dERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNN
YWluRnJhbWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC02MzUsNyAr
MzkyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ0ZyYW1l
TmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWEKICAgICAgICAgc2NoZWR1bGVTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BG
cmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwg
V2FsbFRpbWUgbGFzdFNlZW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTY0NSw3ICs0MDIsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFJlZ2lzdHJhYmxlRAogICAgICAgICBzY2hl
ZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0YXJnZXREb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYg
c291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHRhcmdldERvbWFpbikKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNjU4LDcgKzQxNSw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGly
ZWN0KGNvbnN0IFJlZ2lzdHJhYmxlCiAgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1VzZXJJ
bnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYgZG9tYWluKQogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03MjgsNyArNDg1LDcgQEAgYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmwKICAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
ZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5pc1ByZXZhbGVudFJlc291cmNlICYmIG1h
cEVudHJ5LT52YWx1ZS5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZTsKIH0KIAotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFp
biYgdG9wRnJhbWVEb21haW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKQEAgLTczNiw3ICs0OTMsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFJlZwogICAgIHJl
dHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDog
bWFwRW50cnktPnZhbHVlLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnMo
dG9wRnJhbWVEb21haW4uc3RyaW5nKCkpOwogfQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZy
YW1lRG9tYWluKSBjb25zdAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJh
bWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzQ0LDcgKzUwMSw3IEBAIGJv
b2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIoY29uc3QgUmVnaXN0CiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2lucy5jb250YWlucyh0b3BGcmFtZURvbWFpbi5zdHJpbmcoKSk7CiB9CiAK
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9tYWlu
LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJlY3RlZFRvRG9tYWluKSBjb25zdAorYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJl
Y3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYgcmVkaXJlY3RlZEZyb21Eb21haW4s
IGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgcmVkaXJlY3RlZFRvRG9tYWluKSBjb25zdAogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03NzcsNyArNTM0LDcgQEAgYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYKICAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5ncmFuZGZhdGhlcmVk
OwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURv
bWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKIApAQCAtNzg3LDcgKzU0NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgUmVnCiAgICAgZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4p
OwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJyZXNv
dXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKQordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4s
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzk3LDcgKzU1NCw3IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW4oY29uc3QKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bih0b3BGcmFtZURvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJl
Y3REb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNv
dXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04MDcsNyArNTY0LDcgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBSZWcKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURv
bWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERv
bWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODE3LDcgKzU3
NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSCiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFp
biYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODI3LDcgKzU4NCw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0CiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4m
IHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgzNyw5NSArNTk0LDYgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2kKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NF
UlQoc2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24gPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMg
c2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQo
c2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbCA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzKQot
ewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49
IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lID0gc2Vjb25kczsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldENhY2hlTWF4
QWdlQ2FwKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLmNhY2hl
TWF4QWdlQ2FwVGltZSA9IHNlY29uZHM7Ci0gICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNhY2hlTWF4
QWdlQ2FwKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICAKLSAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25k
cyA9IG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVdICgpIHsKLSAgICAgICAgc3RvcmUt
PnNldENhY2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRl
Q29va2llcyhTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLSAgICAKLSAgICBtX3BhcmFtZXRlcnMu
Y2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKLSAgICB1cGRhdGVDbGllbnRT
aWRlQ29va2llc0FnZUNhcCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3Jl
KSwgc2Vjb25kcyA9IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWVdICgp
IHsKLSAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5ldHdvcmtTZXNz
aW9uKCkpCi0gICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9u
KCkuc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7Ci0gICAgfSk7Ci0jZW5k
aWYKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJl
bW92ZURhdGFSZWNvcmRzKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKLQotICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Q
cm9jZXNzZXMoKSkgewotICAgICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5z
KHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVS
ZW1vdmVkIHx8IE1vbm90b25pY1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNX
ZXJlUmVtb3ZlZCArIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0
RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsK
LSAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKLSAgICAgICAgbV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLX0KLQogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjplbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAt
MTA1NiwzOSArNzI0LDYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQKICAgICByZXR1cm4gc3Rh
dGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucy5jb250YWlucyhmaXJzdFBh
cnR5RG9tYWluLnN0cmluZygpKTsKIH0KIAotc3RhdGljIHZvaWQgZGVidWdMb2dEb21haW5zSW5C
YXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWlucykKLXsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBzdGF0aWMgY29u
c3QgYXV0byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCA9IDUwOwotICAgIGlm
IChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRvbWFpbnMu
c2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7Ci0gICAgICAg
IFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8g
JXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9
cy4iLCBhY3Rpb24sIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IGJhdGNoOwotICAgIGJhdGNoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpOwotICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOwotICAgIHVu
c2lnbmVkIG51bWJlck9mQmF0Y2hlcyA9IHN0ZDo6Y2VpbChkb21haW5zLnNpemUoKSAvIHN0YXRp
Y19jYXN0PGZsb2F0PihtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkpOwotCi0g
ICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAgIGlmIChiYXRjaC5zaXpl
KCkgPT0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAg
IFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8g
JXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9
ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRj
aGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAg
YmF0Y2guc2hyaW5rKDApOwotICAgICAgICAgICAgKytiYXRjaE51bWJlcjsKLSAgICAgICAgfQot
ICAgICAgICBiYXRjaC5hcHBlbmQoZG9tYWluKTsKLSAgICB9Ci0gICAgaWYgKCFiYXRjaC5pc0Vt
cHR5KCkpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRz
IGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJl
ciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZG9t
YWlucyk7Ci0jZW5kaWYKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEx
MjEsMzUgKzc1Niw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1
cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgfSk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2lu
Z0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1RvQmxv
Y2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhy
ZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVBy
ZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtz
dG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlu
cyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jv
c3NUaHJlYWRDb3B5KGRvbWFpbnMpXSB7Ci0gICAgICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWlu
c0hhbmRsZXIoZG9tYWlucyk7Ci0gICAgfSk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcigpOwot
fQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRp
c3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+
JiBwcm9jZXNzRnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CkBAIC0xMTk2LDUyICs4MDIsNiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVAogICAgIHJl
dHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRvZGF5ID0gT3Bl
cmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAoIW1fb3BlcmF0aW5nRGF0ZXMuaXNFbXB0eSgp
ICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5k
b3cpCi0gICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOwotCi0gICAgbV9vcGVyYXRp
bmdEYXRlcy5hcHBlbmQodG9kYXkpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5n
RGF0ZXNXaW5kb3cpIHsKLSAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShy
ZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkgPCBtX29wZXJh
dGluZ0RhdGVzLmZpcnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFsIGNyaXRlcmlhIGZvciBhbiBleHBpcmVkIHN0
YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGluZyBmb3IgYSB0aWdodGVyIHJlc3RyaWN0aW9u
IChtYWlubHkgZm9yIHRlc3RpbmcpLgotICAgIGlmIChtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbikgewotICAgICAgICBpZiAoV2FsbFRpbWU6Om5vdygpID4gcmVzb3VyY2VT
dGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBtX3BhcmFtZXRlcnMudGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1F
bnRyeUNvdW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9w
YXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7Ci19Ci0K
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcnVuZUVudHJpZXNE
b3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvID0gcHJ1bmVU
YXJnZXRDb3VudDsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKQEAgLTEyNjQsMjIgKzgyNCw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiAgICAgQVNTRVJUKCFudW1iZXJP
ZkVudHJpZXNMZWZ0VG9QcnVuZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wYXJhbWV0ZXJzID0geyB9OwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNv
bnN0IFN0cmluZyYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwg
ZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBzdG9yZS0+bG9nVGVzdGlu
Z0V2ZW50KGV2ZW50KTsKLSAgICB9KTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4s
IFNlY29uZHMgc2Vjb25kcykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAg
LTEzMDQsMjcgKzg0OCw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiAgICAgc2V0UHJldmFs
ZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZl
cnlIaWdoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBzdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0g
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICB1
cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2Fw
KCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAppbmRleCA2YjFiMTEzMzc1NzJm
OGQzMjFhZDBmZDlkMGJhYTNjM2Q5ZDY5YTkzLi5hN2NmMmYzNDFlMmI0NGQ4MzYwNTY0NjVmMzEw
YWRiM2YxOGVhM2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjcsMTcgKzI3LDEzIEBACiAKICNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQogCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNs
dWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvQ29t
cGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKLSNpZiBIQVZFKENPUkVf
UFJFRElDVElPTikKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNv
Y29hLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgS2V5ZWREZWNvZGVy
OwogY2xhc3MgS2V5ZWRFbmNvZGVyOwpAQCAtNDYsMzUgKzQyLDE5IEBAIHN0cnVjdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgT3BlcmF0aW5n
RGF0ZTsKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKIAog
Ly8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgotY2xhc3Mg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4geworY2xhc3MgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBUb3BGcmFtZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFN1YkZyYW1lRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgU3ViUmVzb3VyY2VEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVjdERvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3RlZFRvRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgTmF2aWdhdGVkRnJv
bURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE5hdmlnYXRl
ZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAg
dXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNp
bmcgT3BlbmVyUGFnZUlEID0gdWludDY0X3Q7Ci0gICAgdXNpbmcgUGFnZUlEID0gdWludDY0X3Q7
Ci0gICAgdXNpbmcgRnJhbWVJRCA9IHVpbnQ2NF90OwotCiAgICAgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYsIFdvcmtRdWV1
ZSYpOwotICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoKTsKIAogICAgIHZv
aWQgc2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlJik7CiAKLSAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NN
YXAuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Y29uc3QgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsg
fQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rlcj4gY3JlYXRlRW5j
b2RlckZyb21EYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJvbURlY29kZXIo
V2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7CkBAIC04MiwxNDUgKzYyLDczIEBAIHB1YmxpYzoKICAg
ICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJik7
CiAgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKIAotICAgIHZvaWQgdXBkYXRlQ29va2ll
QmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZUNv
b2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+Jiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNsZWFyQmxvY2tpbmdTdGF0
ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7Ci0KLSAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0
ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRz
KCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpOwotICAg
IHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRh
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCk7CisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJl
c291cmNlcygpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgpIG92ZXJy
aWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpIG92ZXJyaWRlOwogCi0gICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0OwotICAgIGJvb2wgaXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mKSBjb25zdDsKLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBS
ZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0Owor
ICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0
b3JhZ2VBY2Nlc3MmJiwgT3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KTsKLSAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdDsKLSAgICBi
b29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsK
LSAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJik7CisgICAgdm9pZCBncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0
IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldEdy
YW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKLSAgICBi
b29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAg
IGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlz
UmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVk
VG9Eb21haW4mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4m
KTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBS
ZWRpcmVjdERvbWFpbiYpOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOwotICAg
IHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwg
Y29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsKKyAg
ICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBv
dmVycmlkZTsKKyAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmKTsKKyAg
ICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZh
bHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRNYXhTdGF0aXN0aWNzRW50
cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOwotICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVz
RG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsKLSAgICB2b2lkIHJlc2V0UGFyYW1ldGVy
c1RvRGVmYXVsdFZhbHVlcygpOworICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1l
RG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgY2Fs
Y3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwotICAgIHZvaWQg
c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwotICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKLSAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5nVGlt
ZShTZWNvbmRzKTsKLSAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
Ym9vbCk7Ci0gICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Rl
YnVnTW9kZUVuYWJsZWQ7IH07Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vz
cyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8
RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BG
cmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4m
JiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nl
c3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFs
PEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwotICAg
IHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21h
aW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOwotICAgIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpOworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWlu
JiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9v
bCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9w
RnJhbWVEb21haW4mLCBXYWxsVGltZSBsYXN0U2Vlbikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dT
dWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVk
aXJlY3RlZFRvRG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlv
bihjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3Qg
TmF2aWdhdGVkRnJvbURvbWFpbiYsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSk7
Ci0gICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLSAg
ICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pOwotICAgIHZvaWQgbG9nU3Vi
cmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGly
ZWN0ZWRUb0RvbWFpbiYpOworICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclVz
ZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIGJvb2wgaGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0KLSAgICB2b2lkIHNl
dExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcyk7Ci0KLSAgICB2b2lk
IGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICBjb25zdCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yZTsgfQorICAgIHZv
aWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlk
ZTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZEtlZXBDb29raWVz
KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRC
bG9ja0FuZFB1cmdlQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAg
c3RhdGljIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKICAg
ICBib29sIGhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJikgY29uc3Q7Ci0gICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7CiAgICAgYm9vbCB3YXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
IGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHVwZGF0ZWQpIGNvbnN0Owor
ICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxT
dHJpbmc+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOwogICAgIHVuc2lnbmVk
IHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgSGFzaFNldDxSZWRpcmVjdGVkVG9Eb21haW4+
JiwgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3Q7Ci0gICAgdm9pZCBzZXRT
dG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fc3RvcmFnZUFjY2Vz
c1Byb21wdHNFbmFibGVkICA9IGVuYWJsZWQ7IH0KLSAgICBib29sIHNob3VsZFJlbW92ZURhdGFS
ZWNvcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVuYWJsZWQ7IH0KLSAgICB2b2lkIHNl
dERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOwotICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgT3B0aW9u
YWw8RnJhbWVJRD4sIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgbWFya0FzUHJldmFsZW50
SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAg
IGJvb2wgaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7
Ci0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNG
b3JEZWJ1Z01vZGUoKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZh
bGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlRGF0
YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHBydW5lU3Rh
dGlzdGljc0lmTmVlZGVkKCk7CisgICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpIG92
ZXJyaWRlOwogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNp
dGVEYXRhRm9yKCk7Ci0gICAgdm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzKTsKLSAgICB2
b2lkIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Ci0gICAgdm9pZCBzZXRBZ2VDYXBGb3JDbGllbnRT
aWRlQ29va2llcyhTZWNvbmRzKTsKLSAgICB2b2lkIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdl
Q2FwKCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1
bHRzSWZOZWVkZWQoKTsKLSNlbmRpZgorICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVn
aXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpIG92ZXJyaWRlOwogCi0gICAg
c3RydWN0IFBhcmFtZXRlcnMgewotICAgICAgICBzaXplX3QgcHJ1bmVFbnRyaWVzRG93blRvIHsg
ODAwIH07Ci0gICAgICAgIHNpemVfdCBtYXhTdGF0aXN0aWNzRW50cmllcyB7IDEwMDAgfTsKLSAg
ICAgICAgT3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbjsKLSAgICAg
ICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgeyAxX2ggfTsK
LSAgICAgICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAyNF9oICogNyB9OwotICAgICAg
ICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07Ci0gICAgICAgIFNlY29u
ZHMgY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lIHsgMjRfaCAqIDcgfTsKLSAgICAgICAgYm9v
bCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIHsgZmFsc2UgfTsK
LSAgICAgICAgYm9vbCBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVt
b3ZhbCB7IHRydWUgfTsKLSAgICAgICAgYm9vbCBzaG91bGRTdWJtaXRUZWxlbWV0cnkgeyB0cnVl
IH07Ci0gICAgfTsKLQotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgbV9zdG9y
ZTsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKICAgICBXZWFrUHRyPFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0ZW50U3RvcmFnZTsKICAg
ICBIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jl
c291cmNlU3RhdGlzdGljc01hcDsKLSNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKLSAgICBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXI7Ci0jZWxzZQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2FjdGl2ZVBsdWdp
blRva2VuczsKLSNlbmRpZgotICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwotICAgIFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOwotICAgIFdhbGxUaW1lIG1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKLSAgICBib29sIG1fZGVidWdMb2dnaW5nRW5hYmxlZCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQgeyBmYWxzZSB9OwotICAgIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluIG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB7ICIz
cmRwYXJ0eXRlc3R3ZWJraXQub3JnIl9zIH07Ci0gICAgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlOwotICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0
c0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7
IGZhbHNlIH07Ci0gICAgTW9ub3RvbmljVGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVt
b3ZlZDsKLQotICAgIHVpbnQ2NF90IG1fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXIgeyAwIH07Ci0gICAgT3B0aW9uYWw8dWludDY0X3Q+IG1fcGVuZGluZ1N0YXRpc3Rp
Y3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGE4NDBhNmM2Y2FkNzlkODE3NDRhMTJmMmIyMjRlMGIyZTJmMGQxNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0wLDAgKzEsNTc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlBsdWdpblBy
b2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmgiCisjaW5jbHVkZSAi
U3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2lu
Y2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKKyNpbmNsdWRlICJX
ZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVn
YXRvci5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjb25zdGV4cHIgU2Vjb25kcyBt
aW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCB7IDVfcyB9OworY29uc3RleHByIHVu
c2lnbmVkIG9wZXJhdGluZ0RhdGVzV2luZG93IHsgMzAgfTsKKworI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAorc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Cisg
ICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7CisgICAgICAgIGlmICghYnVpbGRlci5p
c0VtcHR5KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbi5zdHJpbmcoKSk7CisgICAgfQorICAgIHJldHVybiBi
dWlsZGVyLnRvU3RyaW5nKCk7Cit9CisjZW5kaWYKKworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdE
YXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKK3sKKyAgICBkb3VibGUgbXMgPSB0aW1l
LnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRzKCk7CisgICAgaW50IHllYXIgPSBtc1Rv
WWVhcihtcyk7CisgICAgaW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIHllYXIpOworICAgIGlu
dCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsK
KyAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xl
YXBZZWFyKHllYXIpKTsKKworICAgIHJldHVybiBPcGVyYXRpbmdEYXRlIHsgeWVhciwgbW9udGgs
IG1vbnRoRGF5IH07Cit9CisKK09wZXJhdGluZ0RhdGUgT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKQor
eworICAgIHJldHVybiBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6Om5vdygp
KTsKK30KKworU2Vjb25kcyBPcGVyYXRpbmdEYXRlOjpzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCBtX21v
bnRoLCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkgfTsKK30KKworYm9vbCBPcGVyYXRpbmdE
YXRlOjpvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBtX21vbnRoRGF5ID09IG90aGVyLm1fbW9udGhEYXkgJiYgbV9tb250aCA9PSBvdGhl
ci5tX21vbnRoICYmIG1feWVhciA9PSBvdGhlci5tX3llYXI7Cit9CisKK2Jvb2wgT3BlcmF0aW5n
RGF0ZTo6b3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDwgb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsK
K30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjw9KGNvbnN0IE9wZXJhdGluZ0RhdGUm
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDw9IG90aGVy
LnNlY29uZHNTaW5jZUVwb2NoKCk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSYgc3RvcmUsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQorICAgIDogbV9zdG9yZShzdG9yZSkKKyAg
ICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Cit9
CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6flJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cit9CisKK3Vuc2lnbmVk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29tcHV0ZUltcG9ydGFuY2UoY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCit7CisgICAgdW5zaWduZWQg
aW1wb3J0YW5jZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWF4SW1wb3J0YW5jZTsK
KyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCisgICAgICAg
IGltcG9ydGFuY2UgLT0gMTsKKyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRl
cmFjdGlvbikKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAyOworICAgIHJldHVybiBpbXBvcnRhbmNl
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gdmFsdWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbChib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIG1fcGFyYW1ldGVycy5zaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbCA9IHZhbHVlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZFN1Ym1pdFRlbGVtZXRyeSA9
IHZhbHVlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0
YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFzaG91bGRSZW1vdmVEYXRhUmVj
b3JkcygpKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX2FjdGl2ZVBsdWdpblRva2Vu
cy5jbGVhcigpOworICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01h
bmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKQorICAgICAgICBtX2FjdGl2ZVBs
dWdpblRva2Vucy5hZGQocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSk7CisjZW5kaWYKKwor
ICAgIGF1dG8gcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gcmVnaXN0cmFibGVEb21haW5zVG9S
ZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMu
aXNFbXB0eSgpKSB7CisgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1f
ZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQg
dG8gcmVtb3ZlIGRhdGEgcmVjb3JkcyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5zVG9TdHJpbmco
cHJldmFsZW50UmVzb3VyY2VEb21haW5zKS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorCisgICAg
c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQodHJ1ZSk7CisKKyAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShwcmV2
YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCldICgpIG11
dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlzKSB7CisgICAgICAgICAgICBjYWxsYmFjaygp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgd2Vha1RoaXMtPm1f
c3RvcmUuZGVsZXRlV2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnNJbkFsbFBlcnNpc3Rl
bnREYXRhU3RvcmVzKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0
YVR5cGVzKCksIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgc2hvdWxkTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxs
YmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1
ZS5jb3B5UmVmKCldKGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vi
c2l0ZURhdGEpIG11dGFibGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbZG9t
YWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhE
ZWxldGVkV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhp
cyA9IFdURk1vdmUod2Vha1RoaXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXdlYWtUaGlzKSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2Vh
a1RoaXMtPmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKFdURk1vdmUoZG9t
YWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+
c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIGNhbGxi
YWNrKCk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHJlbW92aW5nIGRhdGEgcmVjb3Jkcy4iKTsKKyNlbmRp
ZgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcygp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9wYXJhbWV0
ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKQorICAg
ICAgICBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpOworICAgIAorICAgIHJlbW92ZURhdGFS
ZWNvcmRzKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKCkgbXV0YWJsZSB7
CisgICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBpZiAoIXdlYWtU
aGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHBydW5lU3RhdGlzdGljc0lmTmVl
ZGVkKCk7CisgICAgICAgIHN5bmNTdG9yYWdlSWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoIW1f
cGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
dGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0geworICAgICAgICAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQcm9jZXNzZWQoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURh
dGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
c2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVy
cy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUg
PSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0
YWJsZSB7CisgICAgICAgIHN0b3JlLT5yZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEo
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hv
dWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RG
TW92ZSh3ZWFrVGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9
IHdvcmtRdWV1ZS5jb3B5UmVmKCldIChIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFp
bnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNw
YXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0
YSA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2Vha1Ro
aXMtPmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoZG9tYWluc1dpdGhXZWJzaXRlRGF0YSk7Cisg
ICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9
IFdhbGxUaW1lOjpub3coKSArIHdlYWtUaGlzLT5tX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdU
aW1lOworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5zeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCk7
CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+
bG9nVGVzdGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
KyAgICBpZiAoZW5hYmxlKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1ZywgIlR1cm5lZCBJVFAgRGVidWcgTW9kZSBvbi4iKTsKKyNlbmRpZgorCisg
ICAgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5hYmxlOworICAgIG1fZGVidWdMb2dnaW5nRW5hYmxl
ZCA9IGVuYWJsZTsKKworICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgp
OworICAgIC8vIFRoaXMgd2lsbCBsb2cgdGhlIGN1cnJlbnQgY29va2llIGJsb2NraW5nIHN0YXRl
LgorICAgIGlmIChlbmFibGUpCisgICAgICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7Cisg
ICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gZG9tYWluOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1Jl
cXVlc3RJZk5lY2Vzc2FyeSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKytt
X2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworICAgIG1fd29ya1F1
ZXVlLT5kaXNwYXRjaEFmdGVyKG1pbmltdW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsLCBb
dGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0YXRpc3RpY3NQcm9jZXNzaW5n
UmVxdWVzdElkZW50aWZpZXIgPSAqbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWRlbnRpZmllcl0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmICghbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRl
bnRpZmllciB8fCAqbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmll
ciAhPSBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsZWQuCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Cisg
ICAgICAgIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3QoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9IFdU
Rjo6bnVsbG9wdDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBt
X3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRh
UmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRl
cnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShT
ZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAg
QVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmlu
Z1RpbWUgPSBzZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFt
ZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1cGRhdGVDYWNoZU1heEFn
ZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2Fj
aGVNYXhBZ2VDYXAoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAor
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBz
ZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZV0gKCkgeworICAgICAgICBz
dG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXAoc2Vjb25kcywgW10geyB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVD
b29raWVzKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworICAgIAorICAgIG1fcGFyYW1ldGVycy5j
bGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgPSBzZWNvbmRzOworICAgIHVwZGF0ZUNsaWVudFNp
ZGVDb29raWVzQWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNv
bmRzID0gbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZV0gKCkgeworICAg
ICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBzdG9yZS0+bmV0d29ya1Nlc3Npb24oKSkK
KyAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zZXRB
Z2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhzZWNvbmRzKTsKKyAgICB9KTsKKyNlbmRpZgorfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJlY29y
ZHMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYg
KG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2lu
IDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKSB7
CisgICAgICAgIGlmICghbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY29udGFpbnMocGx1Z2luLT5wbHVn
aW5Qcm9jZXNzVG9rZW4oKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5k
aWYKKworICAgIHJldHVybiAhbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgfHwgTW9u
b3RvbmljVGltZTo6bm93KCkgPj0gKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsg
bV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVt
b3ZlZChib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCA9IHZhbHVlOworICAgIGlmIChtX2RhdGFSZWNv
cmRzQmVpbmdSZW1vdmVkKQorICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3Zl
ZCA9IE1vbm90b25pY1RpbWU6Om5vdygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9z
dG9yZSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CisgICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29r
aWVzRm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
eworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisgICAgCisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChk
b21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9
IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlucyldIHsK
KyAgICAgICAgc3RvcmUtPmNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihkb21haW5zKTsKKyAgICB9
KTsKKworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2VT
dGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAgICAgICAgcHJv
Y2Vzc0Z1bmN0aW9uKHJlc291cmNlU3RhdGlzdGljKTsKK30KKworT3B0aW9uYWw8U2Vjb25kcz4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNzRXBpcmF0aW9uVGltZSgpIGNv
bnN0Cit7CisgICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKQor
ICAgICAgICByZXR1cm4gV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBtX3Bh
cmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgpOworICAgIAorICAgIGlm
IChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAgICAg
ICAgcmV0dXJuIG1fb3BlcmF0aW5nRGF0ZXMuZmlyc3QoKS5zZWNvbmRzU2luY2VFcG9jaCgpOwor
ICAgIAorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK1ZlY3RvcjxPcGVyYXRpbmdEYXRl
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlT3BlcmF0aW5nRGF0ZXMoY29uc3Qg
VmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBleGlzdGluZ0RhdGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0
ZT4mJiBuZXdEYXRlcykKK3sKKyAgICBpZiAoZXhpc3RpbmdEYXRlcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBXVEZNb3ZlKG5ld0RhdGVzKTsKKyAgICAKKyAgICBWZWN0b3I8T3BlcmF0aW5n
RGF0ZT4gbWVyZ2VkRGF0ZXMoZXhpc3RpbmdEYXRlcy5zaXplKCkgKyBuZXdEYXRlcy5zaXplKCkp
OworICAgIAorICAgIC8vIE1lcmdlIHRoZSB0d28gc29ydGVkIHZlY3RvcnMgb2YgZGF0ZXMuCisg
ICAgc3RkOjptZXJnZShleGlzdGluZ0RhdGVzLmJlZ2luKCksIGV4aXN0aW5nRGF0ZXMuZW5kKCks
IG5ld0RhdGVzLmJlZ2luKCksIG5ld0RhdGVzLmVuZCgpLCBtZXJnZWREYXRlcy5iZWdpbigpKTsK
KyAgICAvLyBSZW1vdmUgZHVwbGljYXRlIGRhdGVzLgorICAgIHJlbW92ZVJlcGVhdGVkRWxlbWVu
dHMobWVyZ2VkRGF0ZXMpOworICAgIAorICAgIC8vIERyb3Agb2xkIGRhdGVzIHVudGlsIHRoZSBW
ZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGluZ0RhdGVzV2luZG93LgorICAgIHdoaWxlIChtZXJn
ZWREYXRlcy5zaXplKCkgPiBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAgICAgICAgbWVyZ2VkRGF0
ZXMucmVtb3ZlKDApOworICAgIAorICAgIHJldHVybiBtZXJnZWREYXRlczsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlm
TmVjZXNzYXJ5KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1
dG8gdG9kYXkgPSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpOworICAgIGlmICghbV9vcGVyYXRpbmdE
YXRlcy5pc0VtcHR5KCkgJiYgdG9kYXkgPD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHdoaWxlIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVy
YXRpbmdEYXRlc1dpbmRvdykKKyAgICAgICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7CisK
KyAgICBtX29wZXJhdGluZ0RhdGVzLmFwcGVuZCh0b2RheSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICAKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0
aW5nRGF0ZXNXaW5kb3cpIHsKKyAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGlt
ZShtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkgPCBtX29wZXJhdGluZ0RhdGVzLmZpcnN0
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2Ug
ZG9uJ3QgbWVldCB0aGUgcmVhbCBjcml0ZXJpYSBmb3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNo
ZWNrIHRoZSB1c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZv
ciB0ZXN0aW5nKS4KKyAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24pIHsKKyAgICAgICAgaWYgKFdhbGxUaW1lOjpub3coKSA+IG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lICsgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUo
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNz
RXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykg
Y29uc3QKK3sKKyAgICByZXR1cm4gaGFzU3RhdGlzdGljc0V4cGlyZWQocmVzb3VyY2VTdGF0aXN0
aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1F
bnRyeUNvdW50KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9w
YXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8o
c2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvID0gcHJ1bmVUYXJnZXRD
b3VudDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1l
dGVyc1RvRGVmYXVsdFZhbHVlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBtX3BhcmFtZXRlcnMgPSB7IH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBldmVudCA9IGV2ZW50Lmlzb2xhdGVkQ29weSgp
XSB7CisgICAgICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZlbnQoZXZlbnQpOworICAgIH0pOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2Vz
cyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5yZW1vdmVBbGxT
dG9yYWdlQWNjZXNzKFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0
b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1By
b2Nlc3MoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdXBkYXRl
Q29va2llQmxvY2tpbmcoW10oKSB7IH0pOworICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Cisg
ICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBh
Y3Rpb24sIGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZE
b21haW5zSW5PbmVMb2dTdGF0ZW1lbnQgPSA1MDsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoZG9tYWlucy5zaXplKCkgPD0gbWF4TnVt
YmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5G
TyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tp
ZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgZG9t
YWluc1RvU3RyaW5nKGRvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYmF0Y2g7CisgICAgYmF0
Y2gucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRl
bWVudCk7CisgICAgYXV0byBiYXRjaE51bWJlciA9IDE7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZC
YXRjaGVzID0gc3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1h
eE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7CisgICAgCisgICAgZm9yIChhdXRv
JiBkb21haW4gOiBkb21haW5zKSB7CisgICAgICAgIGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVt
YmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBj
b29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7
cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5z
VG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgYmF0Y2guc2hyaW5r
KDApOworICAgICAgICAgICAgKytiYXRjaE51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBiYXRj
aC5hcHBlbmQoZG9tYWluKTsKKyAgICB9CisgICAgaWYgKCFiYXRjaC5pc0VtcHR5KCkpCisgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQg
dG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJs
aWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZC
YXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oYWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZG9tYWlucyk7CisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MjBiYzUyMDRmNWE5ZWM2MGIz
MDJhOWZjNjYyYmY2ZWZkYjc5MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAg
LTAsMCArMSwyNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShS
RVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xhc3NpZmllci5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVl
dWUuaD4KKworI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBLZXllZERlY29kZXI7CitjbGFzcyBLZXllZEVuY29kZXI7CitzdHJ1Y3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKKworY2xhc3MgT3BlcmF0aW5n
RGF0ZSB7CitwdWJsaWM6CisgICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKKyAgICAKKyAg
ICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUpOworICAgIHN0YXRp
YyBPcGVyYXRpbmdEYXRlIHRvZGF5KCk7CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgp
IGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikg
Y29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0OworICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250
aCwgaW50IG1vbnRoRGF5KQorICAgICAgICA6IG1feWVhcih5ZWFyKQorICAgICAgICAsIG1fbW9u
dGgobW9udGgpCisgICAgICAgICwgbV9tb250aERheShtb250aERheSkKKyAgICB7IH0KKworICAg
IGludCBtX3llYXIgeyAwIH07CisgICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCisg
ICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCit9OworCisvLyBUaGlzIGlzIGFs
d2F5cyBjb25zdHJ1Y3RlZCAvIHVzZWQgLyBkZXN0cm95ZWQgb24gdGhlIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSdzIHN0YXRpc3RpY3MgcXVldWUuCitjbGFzcyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlPiB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9
IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7CisgICAgdXNpbmcgUmVnaXN0cmFibGVE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBUb3BGcmFtZURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFN1YkZyYW1lRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgU3ViUmVzb3VyY2VE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBSZWRpcmVjdERv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFJlZGlyZWN0ZWRG
cm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgUmVkaXJl
Y3RlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgTmF2
aWdhdGVkRnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5n
IE5hdmlnYXRlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNp
bmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW47CisgICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
CisgICAgdXNpbmcgT3BlbmVyUGFnZUlEID0gdWludDY0X3Q7CisgICAgdXNpbmcgUGFnZUlEID0g
dWludDY0X3Q7CisgICAgdXNpbmcgRnJhbWVJRCA9IHVpbnQ2NF90OworICAgIAorICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBX
b3JrUXVldWUmKTsKKyAgICB2aXJ0dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IEhh
c2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOyB9CisKKyAgICB2b2lkIHByb2Nl
c3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOworICAgIHZvaWQgdXBk
YXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgY2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCisgICAgdm9p
ZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgcHJv
Y2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOworCisgICAgdmlydHVhbCB2b2lkIGNsYXNz
aWZ5UHJldmFsZW50UmVzb3VyY2VzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jU3RvcmFn
ZUlmTmVlZGVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5
KCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVu
ZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9t
YWluJiYpID0gMDsKKyAgICB2b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKworICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVE
YXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5n
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21h
aW4mKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkdW1w
UmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJv
b2wgdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJikgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGluY3JlbWVu
dFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8U3RyaW5nPiYmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVz
b3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29u
c3QgUmVkaXJlY3REb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21h
aW4mKSA9IDA7CisKKyAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmKTsKKwor
ICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50
KTsKKyAgICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3Vu
dCk7CisgICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAgICBPcHRp
b25hbDxTZWNvbmRzPiBzdGF0aXN0aWNzRXBpcmF0aW9uVGltZSgpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0ID0gMDsKKworICAg
IHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFs
KGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOworICAgIHZv
aWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKKyAgICB2b2lkIHNldE1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKKyAgICB2b2lkIHNl
dEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKKyAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7CisgICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH07CisgICAgdm9pZCBzZXRQcmV2YWxl
bnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworCisgICAg
dmlydHVhbCB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFN0b3Jh
Z2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFn
ZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFj
Y2Vzc1N0YXR1cyk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNz
KFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9v
bCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdhdGVk
VG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21Eb21h
aW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21E
b21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcykgPSAwOworCisgICAgdm9pZCBkaWRD
cmVhdGVOZXR3b3JrUHJvY2VzcygpOworCisgICAgY29uc3QgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7IH0KKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKKworcHJvdGVjdGVkOgor
ICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBt
ZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdE
YXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpOworICAgIHN0YXRpYyB2b2lk
IGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpOworICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4
cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OworICAgIGJvb2wgaGFz
U3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUp
IGNvbnN0OworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVs
dHNJZk5lZWRlZCgpOworI2VuZGlmCisgICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CisgICAgdmlydHVhbCBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpID0gMDsKKyAgICB2
aXJ0dWFsIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1v
dmVXZWJzaXRlRGF0YUZvcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzUHJv
bXB0c0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVk
ICA9IGVuYWJsZWQ7IH0KKyAgICBib29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7
CisgICAgdm9pZCBzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1
Z0xvZ2dpbmdFbmFibGVkICA9IGVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVp
bmdSZW1vdmVkKGJvb2wpOworICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOwor
ICAgIHZvaWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKKyAgICB2b2lkIHNldEFnZUNhcEZvckNs
aWVudFNpZGVDb29raWVzKFNlY29uZHMpOworICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXAoKTsKKworICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKKyAgICAgICAgc2l6ZV90IHBy
dW5lRW50cmllc0Rvd25UbyB7IDgwMCB9OworICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0Vu
dHJpZXMgeyAxMDAwIH07CisgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb247CisgICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsIHsgMV9oIH07CisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsg
MjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICog
NyB9OworICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2gg
KiA3IH07CisgICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNC
ZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07CisgICAgICAgIGJvb2wgc2hvdWxkU3Vi
bWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9OworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93
b3JrUXVldWU7CisgICAgSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOworI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9O
KQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKKyNlbHNlCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXIgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKKyNlbmRpZgor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1f
YWN0aXZlUGx1Z2luVG9rZW5zOworI2VuZGlmCisgICAgUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7
CisgICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7CisgICAgV2FsbFRp
bWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOworICAgIGJvb2wgbV9kZWJ1Z0xvZ2dp
bmdFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGVidWdNb2RlRW5hYmxlZCB7IGZhbHNl
IH07CisgICAgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNl
OworICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNlIH07CisgICAgTW9ub3Rvbmlj
VGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZDsKKworICAgIHVpbnQ2NF90IG1f
bGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgeyAwIH07CisgICAgT3B0
aW9uYWw8dWludDY0X3Q+IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50
aWZpZXI7CisKKyAgICBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGljUHJldmFs
ZW50UmVzb3VyY2UgeyAiM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyJfcyB9OworCisgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRy
YWNlQmFjayB7IDUwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGE4MjhlZmNkNmEzYWFmNWFhMzNiNGI2YzQzMzZiMjFjZmJjY2YxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2lt
cG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRl
ZCgpCit7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBpbml0T25jZTsKKworICAgIGRpc3Bh
dGNoX29uY2UoJmluaXRPbmNlLCBeeworICAgICAgICBTZWNvbmRzIHRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9y
S2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iXSk7
CisgICAgICAgIGlmICh0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID4gMF9zICYmIHRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24gPD0gMjRfaCAqIDMwKQorICAgICAgICAgICAgc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbih0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTsKKworICAgICAgICBT
ZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIl0pOworICAgICAgICBp
ZiAobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID4gMF9zICYmIG1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA8IDFfaCkKKyAgICAgICAgICAgIHNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwpOworCisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lKFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiXSk7CisgICAgICAgIGlmIChncmFuZGZh
dGhlcmluZ1RpbWUgPiAwX3MgJiYgZ3JhbmRmYXRoZXJpbmdUaW1lIDw9IDI0X2ggKiA3KQorICAg
ICAgICAgICAgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKGdyYW5kZmF0aGVyaW5nVGltZSk7CisKKyAg
ICAgICAgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiSXRwRGVidWdNb2RlIl0pOworICAg
ICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01hbnVhbFByZXZhbGVudFJlc291cmNlIl07CisgICAgICAgIGlmIChkZWJ1Z01hbnVhbFBy
ZXZhbGVudFJlc291cmNlKQorICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1
Z01vZGUoUmVnaXN0cmFibGVEb21haW4oZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkpOwor
CisgICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NhY2hlTWF4QWdlQ2FwIl0pOworICAgICAgICBpZiAoY2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMgPiAwX3MgJiYgY2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMgPD0gMjRfaCAqIDM2NSkKKyAgICAgICAgICAgIHNldENhY2hlTWF4QWdl
Q2FwKGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKTsKKyAgICAgICAgCisgICAg
ICAgIFNlY29uZHMgY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
aWVudFNpZGVDb29raWVzQWdlQ2FwIl0pOworICAgICAgICBpZiAoY2xpZW50U2lkZUNvb2tpZXNB
Z2VDYXAgPiAwX3MgJiYgY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAgPD0gMjRfaCAqIDM2NSkKKyAg
ICAgICAgICAgIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKGNsaWVudFNpZGVDb29raWVz
QWdlQ2FwKTsKKyAgICB9KTsKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggYWRiZGFkMjM5OGZiOGUwNzdjYTQx
Nzk3YTc5ZmVkYzA0MDUxOGQzOS4uMTkwZDE2NDk5M2RhM2YzODYwZjQwZDAxM2U2NDgyNjBkODE1
ZDI0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlLmgiCiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0
aXN0aWNzLmgiCkBAIC00OCw2ICs0OSw5IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGlj
TG9nZ2luZ0tleXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FM
aXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgogI2lu
Y2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJl
YWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTg2LDcgKzkw
LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm8KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlXSB7Ci0gICAgICAgIGlmIChtX21lbW9y
eVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRh
YmFzZVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVl
KTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwog
ICAgIH0pOwogfQpAQCAtOTYsOSArMTAyLDExIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywg
dmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRh
YmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1v
cnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwotICAgICAgICAKKwogICAgICAgICBwb3N0VGFz
a1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTEwOCw3
ICsxMTYsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxk
Q2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3JkcwogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICht
X21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAg
bV9kYXRhYmFzZVN0b3JlLT5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC0xMjAsNyArMTMwLDkgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVl
KQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywg
dmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFi
YXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFNob3VsZFN1Ym1pdFRl
bGVtZXRyeSh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwogICAg
IH0pOwogfQpAQCAtMTQzLDExICsxNTUsMTUgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoTmV0d29ya1Nlc3Npb24mIG4KICAg
ICBwb3N0VGFzayhbdGhpcywgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IHJlc291
cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkuaXNvbGF0ZWRDb3B5KCldIHsKICAgICAgICAgbV9t
ZW1vcnlTdG9yZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlPigqdGhpcywgbV9zdGF0aXN0aWNzUXVldWUpOwogICAgICAgICBtX3BlcnNpc3RlbnRT
dG9yYWdlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2U+KCptX21lbW9yeVN0b3JlLCBtX3N0YXRpc3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RpcmVjdG9yeSk7CisgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLml0cERhdGFiYXNlTW9kZUVuYWJsZWQoKSkgeworICAgICAgICAg
ICAgbV9kYXRhYmFzZVN0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+cG9wdWxh
dGVGcm9tTWVtb3J5U3RvcmUoKm1fbWVtb3J5U3RvcmUpOworICAgICAgICB9CiAKICAgICAgICAg
Ly8gRklYTUUoMTkzMjk3KTogVGhpcyBzaG91bGQgYmUgcmV2aXNlZCBhZnRlciB0aGUgVUlQcm9j
ZXNzIHZlcnNpb24gZ29lcyBhd2F5LgogICAgICAgICBtX21lbW9yeVN0b3JlLT5kaWRDcmVhdGVO
ZXR3b3JrUHJvY2VzcygpOwogICAgIH0pOwotICAgIAorCiAgICAgbV9kYWlseVRhc2tzVGltZXIu
c3RhcnRSZXBlYXRpbmcoMjRfaCk7CiB9CiAKQEAgLTE4Nyw2ICsyMDMsNyBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3Jl
KCkKICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goWyZzZW1hcGhvcmUsIHRoaXNdIHsK
ICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IG51bGxwdHI7CiAgICAgICAgIG1fbWVtb3J5
U3RvcmUgPSBudWxscHRyOworICAgICAgICBtX2RhdGFiYXNlU3RvcmUgPSBudWxscHRyOwogICAg
ICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7CiAgICAgc2VtYXBob3JlLndhaXQoKTsK
QEAgLTE5Nyw3ICsyMTQsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIHZhbAogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWUsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAg
ICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdN
b2RlKHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUp
OwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKQEAgLTIwOCw3ICsyMjcsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaQogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFp
biA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUp
CisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3Rv
cmUtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGRvbWFpbik7CisgICAgICAgIGVs
c2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2
YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTIxOSw3ICsyNDAsOSBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0
b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgICAgIGVsc2UgaWYg
KG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzKCk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtMjU4LDE3ICsyODEsMjYgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHMKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9z
dFRhc2soW3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5
KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1l
SUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlm
ICghbV9tZW1vcnlTdG9yZSAmJiAhbV9kYXRhYmFzZVN0b3JlKSB7CiAgICAgICAgICAgICBwb3N0
VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsK
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IG1fbWVtb3J5U3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1l
RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgewotICAgICAg
ICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgaGFzU3RvcmFnZUFjY2Vzc10oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihoYXNTdG9yYWdlQWNjZXNzKTsKKworICAgICAgICBpZiAobV9k
YXRhYmFzZVN0b3JlKSB7CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmhhc1N0b3JhZ2VB
Y2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0
b3JhZ2VBY2Nlc3MpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VB
Y2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGhhc1N0b3JhZ2VBY2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0pOworICAgICAgICB9IGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpIHsKKyAgICAg
ICAgICAgIG1fbWVtb3J5U3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRv
cEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VBY2Nlc3MpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0K
IApAQCAtMzI1LDE4ICszNTcsMjYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICB9CiAK
ICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHko
KSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVt
b3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3Rv
cmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVE
b21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQs
IHByb21wdEVuYWJsZWQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShTdG9yYWdlQWNjZXNzU3RhdHVzIHN0YXR1cykgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBzdGF0dXNdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoc3RhdHVzKTsKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkgeworICAgICAgICAg
ICAgbV9kYXRhYmFzZVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1l
RG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlE
LCBwcm9tcHRFbmFibGVkLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oU3RvcmFnZUFjY2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFibGUgeworICAgICAgICAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIHN0YXR1c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0pOwotICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX21lbW9yeVN0b3JlKSB7Cisg
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1
YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQudmFsdWUoKSwg
cGFnZUlELCBwcm9tcHRFbmFibGVkLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oU3RvcmFnZUFjY2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTM0OCw3ICszODgsOSBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NV
bmRlck9wZW5lcihSZWdpc3RyYWJsZQogICAgIC8vIGNvbWluZyBmcm9tIElQQy4gU3RyaW5ncyB3
aGljaCBhcmUgc2FmZSB0byBtb3ZlIHRvIG90aGVyIHRocmVhZHMgYXMgbG9uZyBhcyBub2JvZHkg
b24gdGhpcyB0aHJlYWQgaG9sZHMgYSByZWZlcmVuY2UKICAgICAvLyB0byB0aG9zZSBzdHJpbmdz
LgogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXVEZN
b3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwgb3BlbmVyRG9t
YWluID0gV1RGTW92ZShvcGVuZXJEb21haW4pXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1f
ZGF0YWJhc2VTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKGRv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwgV1RGTW92ZShvcGVuZXJE
b21haW4pKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92ZShkb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyRG9t
YWluKSk7CiAgICAgfSk7CiB9CkBAIC0zNTcsMTggKzM5OSwyNiBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2so
W3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRv
cEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBh
Z2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUp
IHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKICAg
ICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5ncmFudFN0b3JhZ2VBY2Nlc3MoV1RGTW92
ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdl
SUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHdhc0dyYW50ZWRBY2Nlc3MpOworICAgICAgICBpZiAobV9kYXRh
YmFzZVN0b3JlKSB7CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmdyYW50U3RvcmFnZUFj
Y2VzcyhXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZy
YW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCB3YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxl
IHsKKyAgICAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5ncmFudFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9w
RnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRl
ZEFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vz
c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Fz
R3JhbnRlZEFjY2Vzcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQogICAgIH0pOwogfQogCkBAIC00MjMsMTEgKzQ3MywxMyBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyZm9ybURhaWx5VGFza3MoKQogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpc10gewotICAgICAgICBpZiAo
IW1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9tZW1vcnlT
dG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAg
bV9tZW1vcnlTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgICAgIGlm
IChtX2RhdGFiYXNlU3RvcmUpIHsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+aW5jbHVk
ZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIG1fZGF0YWJh
c2VTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgICAgIH0gZWxzZSBp
ZiAobV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+aW5jbHVkZVRv
ZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgICAgICB9CiAgICAgfSk7CiB9
CiAKQEAgLTQ3Niw4ICs1MjgsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYQogdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9w
RnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wg
aXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFy
Z2V0RG9tYWluID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9
IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21h
aW4uaXNvbGF0ZWRDb3B5KCksIGlzUmVkaXJlY3QsIGlzTWFpbkZyYW1lXSB7Ci0KLSAgICAgICAg
aWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAg
ICAgICBtX2RhdGFiYXNlU3RvcmUtPmxvZ0ZyYW1lTmF2aWdhdGlvbih0YXJnZXREb21haW4sIHRv
cEZyYW1lRG9tYWluLCBzb3VyY2VEb21haW4sIGlzUmVkaXJlY3QsIGlzTWFpbkZyYW1lKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PmxvZ0ZyYW1lTmF2aWdhdGlvbih0YXJnZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBzb3VyY2VE
b21haW4sIGlzUmVkaXJlY3QsIGlzTWFpbkZyYW1lKTsKICAgICB9KTsKIH0KQEAgLTQ4NSwxNyAr
NTM4LDIxIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5h
dmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bG9nV2ViU29ja2V0TG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4s
IFdhbGxUaW1lIGxhc3RTZWVuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7CiAgICAgcG9zdFRhc2soW3RoaXMsIHRhcmdldERvbWFpbiA9IHRhcmdldERv
bWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgbGFzdFNlZW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAg
ICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5s
b2dTdWJyZXNvdXJjZUxvYWRpbmcodGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNl
ZW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1v
cnlTdG9yZS0+bG9nU3VicmVzb3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21h
aW4sIGxhc3RTZWVuKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFy
Z2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxU
aW1lIGxhc3RTZWVuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VM
b2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZy
YW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhp
cywgdGFyZ2V0RG9tYWluID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURv
bWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAg
ICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21h
aW4sIHRvcEZyYW1lRG9tYWluLCBsYXN0U2Vlbik7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5
U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmco
dGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOwogCiAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtNTA1LDkgKzU2MiwxMCBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2Fk
aW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNv
dXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHBvc3RUYXNr
KFt0aGlzLCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRhcmdl
dERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBt
X2RhdGFiYXNlU3RvcmUtPmxvZ1N1YnJlc291cmNlUmVkaXJlY3Qoc291cmNlRG9tYWluLCB0YXJn
ZXREb21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+bG9nU3VicmVzb3VyY2VSZWRpcmVjdChzb3VyY2VEb21haW4sIHRhcmdl
dERvbWFpbik7Ci0KICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgfSk7CiB9CkBAIC01MTcsNyArNTc1LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3Ro
aXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2Rh
dGFiYXNlU3RvcmUtPmxvZ1VzZXJJbnRlcmFjdGlvbihkb21haW4pOworICAgICAgICBlbHNlIGlm
IChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVy
YWN0aW9uKGRvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIH0pOwpAQCAtNTI4LDcgKzU4OCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFz
ayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAo
bV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAg
IG1fZGF0YWJhc2VTdG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAg
ZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFy
VXNlckludGVyYWN0aW9uKGRvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNTM3LDcgKzU5OSw4IEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9z
dFRhc2soW3RoaXMsIGRvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24g
PSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aGFzSGFkVXNlckludGVyYWN0aW9uKGRv
bWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX2RhdGFi
YXNlU3RvcmUgPyBtX2RhdGFiYXNlU3RvcmUtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4p
CisgICAgICAgICAgICA6IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5oYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oZG9tYWluKSA6IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYWRV
c2VySW50ZXJhY3Rpb24sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYWRVc2Vy
SW50ZXJhY3Rpb24pOwogICAgICAgICB9KTsKQEAgLTU0OSw3ICs2MTIsOSBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAg
cG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgc2Vjb25kcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3Rv
cmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldExhc3RTZWVuKGRvbWFpbiwgc2Vj
b25kcyk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5zZXRMYXN0U2Vlbihkb21haW4sIHNlY29uZHMpOwogICAgICAgICBwb3N0VGFz
a1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTU2MCw3ICs2
MjUsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haQogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJh
c2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0UHJldmFsZW50UmVzb3Vy
Y2UoZG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CiAgICAgICAgIHBv
c3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNTcx
LDcgKzYzOCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVECiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0
ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9k
YXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoZG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShkb21haW4p
OwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKQEAgLTU5NCw3ICs2NjMsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbgogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFp
biA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudFJl
c291cmNlID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUHJldmFsZW50UmVzb3Vy
Y2UoZG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBt
X2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFiYXNlU3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9t
YWluKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lz
UHJldmFsZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1By
ZXZhbGVudFJlc291cmNlKTsKICAgICAgICAgfSk7CkBAIC02MDYsNyArNjc2LDggQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG8KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgPSBtX21lbW9yeVN0b3JlID8gbV9t
ZW1vcnlTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOworICAg
ICAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlID0gbV9kYXRhYmFzZVN0b3JlID8gbV9k
YXRhYmFzZVN0b3JlLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pCisgICAgICAgICAg
ICA6IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzVmVyeVByZXZhbGVu
dFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UpOwogICAgICAgICB9KTsKQEAgLTYxOCw3ICs2ODksOCBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
KGNvbnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0
VGFzayhbdGhpcywgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRl
ZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBtX21lbW9y
eVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1
YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBp
c1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFi
YXNlU3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihzdWJyZXNvdXJjZURvbWFp
biwgdG9wRnJhbWVEb21haW4pCisgICAgICAgICAgICA6IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9y
eVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoc3VicmVzb3VyY2VEb21haW4s
IHRvcEZyYW1lRG9tYWluKSA6IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOwogICAgICAgICB9KTsKQEAgLTYzMCw3
ICs3MDIsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdHJhYgogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5k
ZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2Rh
dGFiYXNlU3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZURvbWFpbiwg
dG9wRnJhbWVEb21haW4pCisgICAgICAgICAgICA6IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0
b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoc3ViRnJhbWVEb21haW4sIHRvcEZyYW1l
RG9tYWluKSA6IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVy
ZWRBc1N1YkZyYW1lVW5kZXIpOwogICAgICAgICB9KTsKQEAgLTY0Miw3ICs3MTUsOCBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKGNvbnN0IFJlZ2lzdHJhYgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBwb3N0VGFzayhbdGhpcywgZG9tYWluUmVkaXJlY3RlZEZyb20gPSBkb21haW5SZWRpcmVjdGVk
RnJvbS5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3RlZFRvID0gZG9tYWluUmVkaXJlY3Rl
ZFRvLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJl
Y3RpbmdUbyA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8oZG9tYWluUmVkaXJlY3RlZEZyb20sIGRvbWFpblJlZGlyZWN0ZWRUbykgOiBm
YWxzZTsKKyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBtX2RhdGFi
YXNlU3RvcmUgPyBtX2RhdGFiYXNlU3RvcmUtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhk
b21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRvKQorICAgICAgICAgICAgOiBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGRvbWFpblJlZGlyZWN0ZWRGcm9tLCBkb21haW5SZWRpcmVjdGVkVG8pIDogZmFsc2U7CiAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbywgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk7CiAg
ICAgICAgIH0pOwpAQCAtNjU0LDcgKzcyOCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywg
ZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJh
c2VTdG9yZS0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBlbHNlIGlm
IChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJQcmV2YWxl
bnRSZXNvdXJjZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTY2NSw3ICs3NDEsOSBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCB2YWx1ZSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAg
ICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldEdyYW5kZmF0aGVyZWQoZG9tYWluLCB2YWx1ZSk7
CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRHcmFuZGZhdGhlcmVkKGRvbWFpbiwgdmFsdWUpOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTY3Niw3ICs3NTQs
OCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNHcmFuZGZhdGhlcmVk
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkbwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpXSgpIG11dGFi
bGUgewotICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9IG1fbWVtb3J5U3RvcmUgPyBtX21l
bW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQoZG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29s
IGlzR3JhbmRGYXRoZXJlZCA9IG1fZGF0YWJhc2VTdG9yZSA/IG1fZGF0YWJhc2VTdG9yZS0+aXNH
cmFuZGZhdGhlcmVkKGRvbWFpbikKKyAgICAgICAgICAgIDogbV9tZW1vcnlTdG9yZSA/IG1fbWVt
b3J5U3RvcmUtPmlzR3JhbmRmYXRoZXJlZChkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RU
YXNrUmVwbHkoW2lzR3JhbmRGYXRoZXJlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGlzR3JhbmRGYXRoZXJlZCk7CiAgICAgICAgIH0pOwpAQCAtNjg4LDcgKzc2Nyw5IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW4oY29uc3QgUmVnaXN0CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFi
YXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBl
bHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbik7
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwpAQCAtNjk5LDcgKzc4MCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgUmVnCiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21h
aW4gPSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0
b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBt
X2RhdGFiYXNlU3RvcmUtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihzdWJyZXNv
dXJjZURvbWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0
b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lT3JpZ2luKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFpbik7CiAgICAgICAgIHBv
c3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNzEw
LDcgKzc5Myw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNv
dXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3RlZFRvID0gZG9tYWluUmVk
aXJlY3RlZFRvLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0
YWJhc2VTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHN1YnJlc291cmNlRG9t
YWluLCBkb21haW5SZWRpcmVjdGVkVG8pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3Jl
KQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8pOwogICAgICAgICBwb3N0
VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTcyMSw3
ICs4MDYsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaQogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3Vy
Y2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVk
aXJlY3RlZEZyb20uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9k
YXRhYmFzZVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShzdWJyZXNvdXJj
ZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZEZyb20pOworICAgICAgICBlbHNlIGlmIChtX21lbW9y
eVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdEZyb20oc3VicmVzb3VyY2VEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7
CkBAIC03MzIsNyArODE5LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3RyYWIKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCB0b3BGcmFtZURvbWFpbiA9IHRv
cEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5S
ZWRpcmVjdGVkVG8uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9k
YXRhYmFzZVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVEb21haW4s
IGRvbWFpblJlZGlyZWN0ZWRUbyk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAg
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9w
RnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNzQzLDcgKzgzMiw5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBSZWdpc3RyCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRl
ZENvcHkoKSwgZG9tYWluUmVkaXJlY3RlZEZyb20gPSBkb21haW5SZWRpcmVjdGVkRnJvbS5pc29s
YXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAg
ICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVj
dGVkRnJvbSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFtZURvbWFp
biwgZG9tYWluUmVkaXJlY3RlZEZyb20pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTc1NSwxMyArODQ2LDE5IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBk
YXRlKENvbXBsZXRpb25IYW5kCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAg
ICAgaWYgKCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKICAgICAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJs
b2NraW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworCisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+dXBkYXRlQ29v
a2llQmxvY2tpbmcoW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5
UmVmKCldKCkgeyB9KTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtjYWxsYmFja0FnZ3JlZ2F0
b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAK
QEAgLTc3MCwxNCArODY3LDE5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlucyhjb25zCiAgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21h
aW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBp
ZiAoIW1fbWVtb3J5U3RvcmUgJiYgIW1fZGF0YWJhc2VTdG9yZSkgewogICAgICAgICAgICAgcG9z
dFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9j
a2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsK
KworICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0
b3JlLT51cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7Cisg
ICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT51cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAg
fSk7CiB9CiAKQEAgLTc4NiwxNCArODg4LDE5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QKICAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9t
YWlucyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1f
bWVtb3J5U3RvcmUgJiYgIW1fZGF0YWJhc2VTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JE
b21haW5zKGRvbWFpbnMsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsKKworICAgICAgICBpZiAo
bV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5jbGVhckJsb2Nr
aW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5
U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JE
b21haW5zKGRvbWFpbnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3Iu
Y29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTgwNCwyMiArOTExLDM2IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KFNob3VsZEdyCiAgICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQog
ICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+Y2xlYXIoKTsKIAotICAgICAgICBDb21w
bGV0aW9uSGFuZGxlckNhbGxpbmdTY29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKKyAgICAgICAg
ICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6
OlllcykKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50IEJlZm9yZSBiZWluZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGFuZCBtX2Rh
dGFiYXNlU3RvcmUgYXJlIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsK
KworICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsK
IAotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkgewotICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwg
c2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlckNhbGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAobV9kYXRhYmFz
ZVN0b3JlKSB7CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSAoKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3Jh
bmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZGF0
YWJhc2VTdG9yZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Z3Jh
bmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3Zl
KGNhbGxiYWNrQWdncmVnYXRvcildKCkgbXV0YWJsZSB7IH0pOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQsIG1fZGF0YWJhc2VTdG9y
ZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobV9tZW1vcnlTdG9y
ZSkgeworICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNhbGxiYWNr
QWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldICgpIG11dGFibGUgewog
ICAgICAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhl
clN0YXRpc3RpY3M6OlllcykgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YShjb21wbGV0aW9uSGFuZGxlckNhbGxlci5yZWxlYXNlKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dl
YnNpdGVEYXRhKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRv
cildKCkgbXV0YWJsZSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUgaXMgbnVsbCB3aGVuIHRyeWlu
ZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVy
ID09IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKQotICAgICAgICAgICAgICAgIFJF
TEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQgQmVmb3JlIGJlaW5n
IGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUgaXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhl
ciBkYXRhLiIpOwogICAgICAgICB9CiAgICAgfSk7CiB9CkBAIC04MzcsNyArOTU4LDkgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb24oU2Vjb25kcyBzZWNvbmQKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VT
dG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKKyAgICAgICAgZWxz
ZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtODQ3LDcgKzk3MCw5IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoU2VjCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0
b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFz
ZVN0b3JlLT5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7
CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CiAK
ICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC04
NTgsNyArOTgzLDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdy
YW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXAKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAg
ICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsK
KyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPnNldEdyYW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsKIAogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTkwMyw3ICsxMDMwLDkgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVz
KHNpemVfdCBtYXhpbXVtRW50cnkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIHBvc3RUYXNrKFt0aGlzLCBtYXhpbXVtRW50cnlDb3VudCwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmICht
X21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAg
bV9kYXRhYmFzZVN0b3JlLT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3Vu
dCk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9y
eVN0b3JlLT5zZXRNYXhTdGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7CiAKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC05MTUs
NyArMTA0NCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVu
ZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBwcnVuZVRhcmdldENvdW50LCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUp
CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25UbyhwcnVu
ZVRhcmdldENvdW50KTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50
KTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
QEAgLTkyNyw3ICsxMDU4LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGEKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAg
ICAgbV9kYXRhYmFzZVN0b3JlLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOwogCiAgICAgICAgIHBvc3RUYXNrUmVw
bHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCmluZGV4IDIwNThmNzhjYjk0Y2FiNTA0NzNlN2ZkZTI1MDZi
OGNlOTVmYjZiYjcuLmQ0MzhkYjU1ZmY5MDc5N2QxOTA4NDRmZWZiM2I0ZjY2Yzc4OWRjOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTUyLDYg
KzUyLDcgQEAgZW51bSBjbGFzcyBTaG91bGRTYW1wbGUgOiBib29sOwogbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uOworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU7CiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7
CiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CiBjbGFzcyBX
ZWJGcmFtZVByb3h5OwpAQCAtMTkxLDYgKzE5Miw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdvcmtR
dWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4gbV9tZW1vcnlTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBtX3BlcnNpc3RlbnRT
dG9yYWdlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZT4gbV9kYXRhYmFzZVN0b3JlOwogCiAgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlPiBtX2RhaWx5VGFza3NUaW1lcjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA2Mzg4MTM0OWJi
YjUyZjU1MmUzYWExZjdjYWQ0ODU0NjdlOWExNTdjLi42ZDQ0MzM0MjUzYjYxNTg0MjZkMWVlNThj
NTlmMjU3MTJhMDUwMDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcApAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0
d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3Qu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2NoZW1lUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5o
PgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1zLmg+CkBAIC0zMjYsNiArMzI3LDggQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiYKICAgICB9CiAjZW5kaWYKIAorICAgIFdlYkNvcmU6OlJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxl
ZChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUl0cERhdGFiYXNlTW9kZSk7CisKICAgICBhdXRvKiBk
ZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vz
c2lvbklEKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZh
dWx0RGF0YVN0b3JlUGFyYW1ldGVycy5wZW5kaW5nQ29va2llcykKICAgICAgICAgZGVmYXVsdFNl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNldENvb2tpZShjb29raWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCBjNmRmMDhlOWZiNzc2NmY3NzBhZmFkZWYx
YWE3ZjIxMjk0OWQxZjU1Li42ZDNhNTJhZTNkZGIyYmIyOTBhYTc1ZmI2NmY0MzE0MWFhYjM3ZTUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtOTMsNiArOTMsNyBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVy
JiBlbmNvZGVyKSBjb25zdAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBlbmNvZGVy
IDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdv
cmtlcnNDYW5IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWlu
YXRpb25EZWxheTsKICNlbmRpZgorICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSXRwRGF0YWJh
c2VNb2RlOwogfQogCiBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNv
ZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cyYgcmVzdWx0KQpAQCAtMjE3LDYgKzIxOCw5IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuc2hvdWxkRW5hYmxlSXRwRGF0YWJhc2VNb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApp
bmRleCAyZmQzYmU5ZmRlZDk4MGI3NTczY2UzYjUxNmIwN2E5NmZhZGFmNzNiLi41MzJjZWYzODg0
NGM4ZjcyYmJiNzRkMzExNTliOWM0YjMzMjIxNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5oCkBAIC0xMTEsNiArMTExLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnND
YW5IYW5kbGU7CiAgICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJt
aW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsKICNlbmRpZgorICAgIGJvb2wgc2hvdWxkRW5hYmxlSXRw
RGF0YWJhc2VNb2RlIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKaW5kZXggYmRiZmRmYzIwNTFj
NmY0NDg3NzQ5ZDBmYjRkYjcwZDBjZWI3MjdhOS4uMDUwYzg1MTRkOGY3ZGE3MDI5MGIzYjA3MzEx
MWNiNTliN2M4Nzk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ3LDcgKzQ3LDEyIEBAIFJlc291cmNlTG9hZFByZXZhbGVuY2UgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNlUHJldmFsCiAgICAgYXV0byBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKTsKICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnMuc2l6ZSgpOwogICAgIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50
ID0gcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zaXplKCk7Ci0g
ICAgCisKKyAgICByZXR1cm4gY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50LCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9Db3VudCwgY3VycmVudFByZXZhbGVuY2UpOworfQorCitSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOjpjYWxjdWxhdGVSZXNvdXJj
ZVByZXZhbGVuY2UodW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50
LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgdW5zaWduZWQgdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50LCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNl
KQorewogICAgIGlmICghc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50CiAgICAg
ICAgICYmICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQKICAgICAgICAgJiYgIXN1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXIuaAppbmRleCBhY2YxZjM4OWRkNTFhMDBjNTEwN2RjNjcyZjlkM2ZiYTlmMmJm
ZWYwLi5hZjNlMjM0YzBiNjEzZGRmZDAwNWFlNjA5MGU5MjMwNDVmMjUxNWIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAg
ICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcigpID0gZGVmYXVsdDsKICAgICB2aXJ0
dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcigpID0gZGVmYXVsdDsKICAgICBS
ZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZSBjdXJyZW50UHJldmFsZW5jZSk7CisgICAgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZSBjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UodW5zaWduZWQgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwg
dW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNlKTsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wg
Y2xhc3NpZnkodW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1
bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZy
YW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViUHJlZmVyZW5jZXMueWFtbAppbmRleCBiOTA4NGJlYjkwYTQzYWJmNWI3NTQ4NjRlOTAyYzY1
MjQxYTI1OTkxLi5lNjU1YzNiOTVlY2VjODYxZmJiNWFmZGQ5MWI3ODM4OGVjY2JiMjZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKQEAgLTEzNzksNiArMTM3OSwx
NCBAQCBJdHBEZWJ1Z01vZGVFbmFibGVkOgogICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJJ
bnRlbGxpZ2VudCBUcmFja2luZyBQcmV2ZW50aW9uIERlYnVnIE1vZGUiCiAgIHdlYmNvcmVCaW5k
aW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCiAKK0l0cERhdGFiYXNlTW9kZUVuYWJsZWQ6Cisg
IHR5cGU6IGJvb2wKKyAgZGVmYXVsdFZhbHVlOiBmYWxzZQorICBodW1hblJlYWRhYmxlTmFtZTog
IklUUCBEYXRhYmFzZSBCYWNrZW5kIE1vZGUiCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjog
IkludGVsbGlnZW50IFRyYWNraW5nIFByZXZlbnRpb24gRGF0YWJhc2UgQmFja2VuZCBNb2RlIgor
ICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcworICBjYXRlZ29yeTogaW50
ZXJuYWwKKwogU2VydmljZVdvcmtlcnNFbmFibGVkOgogICB0eXBlOiBib29sCiAgIGRlZmF1bHRW
YWx1ZTogREVGQVVMVF9TRVJWSUNFX1dPUktFUlNfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNTlj
ZWY4M2E1MjM5ZWVhMGNhMTk3ZjY4Y2IzNzIwNjdiOTc5ZTAyOS4uMDQzNWE5NTBlZGZkMmFlNTFj
NDNhYmQ4MWYwNTE5NzI0NGVmN2VhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC00Miw4ICs0MiwxMCBAQCBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU29ja2V0U3RyZWFtLmNwcAogTmV0d29ya1Byb2Nlc3MvUGlu
Z0xvYWQuY3BwCiBOZXR3b3JrUHJvY2Vzcy9QcmVjb25uZWN0VGFzay5jcHAKIAorTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAK
IE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmNwcAogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2UuY3BwCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29r
aWVNYW5hZ2VyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYzQzZTRlNTA5MGJlZGM3
MWM5ZGU2M2Y4NjdmNzQwYTk0MWZkMGYxMi4uYzAwZmE1N2I5N2RhOTZmYjNkYWNjN2I0NjJkYTFk
NGY0MzcxZmViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMjksNiArMjksNyBAQCBOZXR3
b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3Mv
Y29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Nlc3Npb25Db2NvYS5tbQogCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKIApAQCAtMzMyLDcgKzMzMyw2
IEBAIFVJUHJvY2Vzcy9Db2NvYS9NZWRpYUNhcHR1cmVVdGlsaXRpZXMubW0KIFVJUHJvY2Vzcy9D
b2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENv
Y29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCi1V
SVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0K
IFVJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0KIFVJUHJvY2Vzcy9D
b2NvYS9TZXNzaW9uU3RhdGVDb2RpbmcubW0KIFVJUHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2aWV3
Q29udHJvbGxlckNvY29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNv
Y29hLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjQ4ZTE3YzFjODExYTgyNTMy
MDg0ZTdiYWE4NjJhNTkxNTQ3MTgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCi0KLSNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KLSNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdGVyVXNlckRlZmF1bHRz
SWZOZWVkZWQoKQotewotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3QgaW5pdE9uY2U7Ci0KLSAg
ICBkaXNwYXRjaF9vbmNlKCZpbml0T25jZSwgXnsKLSAgICAgICAgU2Vjb25kcyB0aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRv
dWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uIl0pOwotICAgICAgICBpZiAodGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA+IDBfcyAmJiB0
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uIDw9IDI0X2ggKiAzMCkKLSAgICAgICAgICAgIHNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24odGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik7Ci0KLSAg
ICAgICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCJdKTsKLSAg
ICAgICAgaWYgKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA+IDBfcyAmJiBt
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPCAxX2gpCi0gICAgICAgICAgICBz
ZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsKTsKLQotICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGlt
ZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIl0pOwotICAgICAgICBpZiAo
Z3JhbmRmYXRoZXJpbmdUaW1lID4gMF9zICYmIGdyYW5kZmF0aGVyaW5nVGltZSA8PSAyNF9oICog
NykKLSAgICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5nVGltZShncmFuZGZhdGhlcmluZ1RpbWUp
OwotCi0gICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkl0cERlYnVnTW9kZSJd
KTsKLSAgICAgICAgYXV0byogZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtbTlNVc2Vy
RGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdOwotICAgICAgICBpZiAoZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSkKLSAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlKFJlZ2lzdHJhYmxlRG9tYWluIHsgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNv
dXJjZSB9KTsKLQotICAgICAgICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVz
b3VyY2VzKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktl
eTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCJdKTsKLSAgICAgICAgaWYg
KGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzID4gMF9zICYmIGNhY2hlTWF4QWdl
Q2FwRm9yUHJldmFsZW50UmVzb3VyY2VzIDw9IDI0X2ggKiAzNjUpCi0gICAgICAgICAgICBzZXRD
YWNoZU1heEFnZUNhcChjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk7Ci0gICAg
ICAgIAotICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGllbnRTaWRlQ29va2llc0FnZUNhcCJdKTsKLSAgICAgICAgaWYgKGNsaWVudFNp
ZGVDb29raWVzQWdlQ2FwID4gMF9zICYmIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwIDw9IDI0X2gg
KiAzNjUpCi0gICAgICAgICAgICBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhjbGllbnRT
aWRlQ29va2llc0FnZUNhcCk7Ci0gICAgfSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRl
eCA5ODc0NmMzN2M1MjRjODc4NGI3YTZlODI2Njc2NjY1MTc1ZjZmYjBkLi4zODA4ZDg5YzZmMzlk
OTUyMmViNmIwNDhjNDI4Mzk5ZmIwMmE3ZWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTI5Niw2ICsyOTYsOCBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogI2lmIEVOQUJMRShQUk9YSU1JVFlfTkVUV09SS0lO
RykKICAgICBwYXJhbWV0ZXJzLndpcmVsZXNzQ29udGV4dElkZW50aWZpZXIgPSBtX2NvbmZpZ3Vy
YXRpb24tPndpcmVsZXNzQ29udGV4dElkZW50aWZpZXIoKTsKICNlbmRpZgorCisgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVJdHBEYXRhYmFzZU1vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVu
Y2VzS2V5OjppdHBEYXRhYmFzZU1vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KV1dOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCmlu
ZGV4IDVkYjk4ODY3NjEwZDRlMmExY2ZlMDhmMTFlMmJkODFiZTg3OGEzNzMuLjczZjg4NGFiOTEy
YmNiMWZmNmU1NThkNmRkNzZiMDg3NzU4YTJhYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNs
dWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNpdGVQb2xpY2llc0RhdGEuaCIKICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKaW5kZXggYzk2NzRmOWY3MDYxNmEzNzgxNjRhNjM2OTgzYzVjMmJjYWNlYzBlMS4uNmQz
ODhkYmQ5OWQ5MmQxNWJhNWVhM2I2MmU1YjZiYzU3NjY1Nzk2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8cGFs
L1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA2NDM2NTUzNmQ2MTI3NDdjNjBmNjdiODc1NzkwM2YxZTg1OTE5YWY1Li5k
MzFkOGVjNTE5MDNiMzNkZTZhMmNmNmYwOWQ0ZDcwOWU3ZTE5ZTRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM1MjcsNiArMzUyNyw4
IEBACiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3Rv
cmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNl
c1JlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJl
bmNlc1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjEy
MjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBMEQ3ODYyMjIw
NzkxRUQwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ex
NTA2NzIxREQ1NjI5ODAwMUY0QjU4IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5z
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9u
LnNiIjsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9XZWJLaXQyL2NvbS5hcHBsZS5XZWJLaXQucGx1
Z2luLWNvbW1vbi5zYiI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdB
MUUyQTg0MUVFRkU4OEEwMDM3QTBFMCAvKiBBUElOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElOb3RpZmljYXRpb25Qcm92aWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTNBQ0UxQTFFRUVGNzhDMDBBODY0QTQgLyog
QVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU0Niw2ICszNTQ4LDkgQEAKIAkJN0E5Q0Q4QzIxQzc3
OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQjZFQTQ0MUVFQUFF
MjMwMDAzN0IyQiAvKiBBUElJY29uRGF0YWJhc2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQVBJSWNvbkRhdGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdBQjZFQTQ2MUVFQUI2QjAwMDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblBy
b3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUdlb2xvY2F0aW9u
UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTcyMjFDQUUw
NjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgcGF0aCA9
IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0FDRTgyRTkyMjFERTcyMjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Q29jb2EubW07IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUYyMzYxRTFFNzlBM0I0MDA0
MzhBMDUgLyogV2ViRXJyb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkVycm9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjFG
MUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIz
NjIyMUU3OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJvcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVycm9yc0NvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzY5Niw3ICszNzAxLDYgQEAKIAkJODM3MkRCMjYxQTY3NTYyODAw
QzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3
QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyRTFBNjc3RDRBMDBDNjk3QzUgLyogV0tEaWFn
bm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODM3QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4IC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjYyMUE2OEIzNDIwMDMwRjM4NiAvKiBBUElEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tEaWFnbm9zdGljTG9nZ2lu
Z0RlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjZBMUE2OEMz
MEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTMyMSw3ICs1MzI1LDYgQEAKIAkJCQlDREEyOUExRTFDQkVCNUZC
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8sCiAJCQkJQ0RBMjlB
MjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbiAqLywKIAkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1tICovLAotCQkJCTgzN0E2NjAwMjBFMkFEODQwMEE5REJEOCAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbSAqLywKIAkJCQk1Q0E5ODU0QjIx
MEJFQjczMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tICovLAogCQkJCTFB
MDAyRDQ3MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcuaCAqLywKIAkJCQkx
QTAwMkQ0NjE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLm1tICovLApAQCAt
NjkyMywxMCArNjkyNiwxNSBAQAogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3Np
ZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0Ew
RDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcCAqLywKKwkJCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLywKIAkJCQk3QUZCRDM2NDIxRTUxQkFCMDA1REJB
Q0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCAqLywKIAkJCQk3QUZC
RDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggKi8sCiAJCQkJN0FGQkQzNjkyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8sCiAJCQkJN0FGQkQzNjgyMUU1NDJFODAwNURC
QUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oICovLAorCQkJ
CTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwICovLAorCQkJCTdBQ0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk3QUNFODJFOTIyMURFNzIyMDAwREE5NEMgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8sCiAJCQkJN0E0MUU5RkEyMUY4MURBQzAw
Qjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oICovLAogCQkJCTdBM0ZFQ0Ex
MjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggKi8sCiAJCQkJN0E4NDNB
MUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAg
Ki8sCkBAIC0xMDc5Miw3ICsxMDgwMCw2IEBACiAJCQkJMkQ5MTM0NDQyMTJDRjlGMDAwMTI4QUZE
IC8qIE5ldHNjYXBlUGx1Z2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTJBNzk2MjEyQjZB
REEwMEY0OTNGRCAvKiBOZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRDkxMzQ0NTIxMkNGOUYwMDAxMjhBRkQgLyogTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNkJEMDU4NjYyMjBDRThDMjAwMEJFRDVDIC8qIE5ldHdvcmtBZENs
aWNrQXR0cmlidXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFERDlGMjgxNjM2N0RBMjAw
MTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUyRjA2MEUxMTY1NDMxODUwMEYzMjgxQiAvKiBOZXR3b3Jr
Q29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MUYwNjBFMTE2NTQzMTg1MDBGMzI4M0YgLyogTmV0d29ya01ETlNSZWdpc3Rlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363065</attachid>
            <date>2019-02-26 21:28:29 -0800</date>
            <delta_ts>2019-02-28 13:08:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194867-20190226212828.patch</filename>
            <type>text/plain</type>
            <size>269428</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNmYmQxZDk3YjM2YmZl
MDAzMGM2OTY3MDM2Y2EzZDJkOWVhZWFjOC4uMzEwMjNhYWE2NWMyYWRhZmFiOWY4ZTFkODA1YWUw
OWJiNGUzMGE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBv
cnQgdXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxz
byBleHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdl
YkNvcmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRh
YmFzZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIw
MTktMDItMjUgIEpvaG4gV2lsYW5kZXIgIDx3aWxhbmRlckBhcHBsZS5jb20+CiAKICAgICAgICAg
SW50cm9kdWNlIGFuZCBhZG9wdCBuZXcgY2xhc3MgUmVnaXN0cmFibGVEb21haW4gZm9yIGVUTEQr
MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCAyYWJjNTE2MjAyODRlMDk4OTgzYjRkZWE0NmM5Zjc4MmZmNDQ0YzE0Li42
YWQwNTRmNWI2ZjRjNDM2Y2Y0YWUyMTE2YjI1ZjJhZTJmMzhkYjlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4MyBAQAorMjAxOS0wMi0yMSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgYSBTUUxpdGUgZGF0YWJhc2UgdG8gaG9sZCB0aGUgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xOTQ4NjcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0MjQwODU0PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzIGRhdGFiYXNlIHBsaXN0IGlzIGluZWZmaWNpZW50LiBJdCByZXF1aXJl
cyBtb3JlIG1lbW9yeSB1c2UKKyAgICAgICAgdGhhbiBpdCBuZWVkcywgYW5kIGZvcmNlcyBsb3Rz
IG9mIGxvb3BpbmcgYW5kIHN0cmluZyBjb21wYXJpc29ucyB0byBmaW5kIGluZm9ybWF0aW9uLgor
CisgICAgICAgIFRoaXMgcHJvYmxlbSBoYXMgYWxyZWFkeSBiZWVuIHNvbHZlZCBpbiB0aGUgZm9y
bSBvZiByZWxhdGlvbmFsIGRhdGFiYXNlcy4gV2UgdXNlIHRoZW0KKyAgICAgICAgZWxzZXdoZXJl
IGluIFdlYktpdCwgYW5kIHNob3VsZCBkbyBzbyBmb3IgdGhpcyBzdG9yYWdlIGFzIHdlbGwuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBjcmVhdGVzIGFuIG9wdGlvbmFsIFNRTGl0ZSBkYXRhYmFzZSB0
byBoYW5kbGUgSVRQIG9wZXJhdGlvbnMuCisKKyAgICAgICAgMS4gSXQgYWRkcyBhIG5ldyBpbnRl
cm5hbCBleHBlcmltZW50YWwgZmVhdHVyZSBmbGFnIHRvIGFjdGl2YXRlIGl0LiBJdCByZXF1aXJl
cyB0aGUgdXNlcgorICAgICAgICAgICBleGl0IGFuZCByZXN0YXJ0IHRoZSBwcm9jZXNzIHRvIHRh
a2UgZWZmZWN0LgorICAgICAgICAyLiBJdCBwb3B1bGF0ZXMgaXRzZWxmIGZyb20gdGhlIGV4aXN0
aW5nIHBsaXN0IGZpbGUgKGlmIGl0IGV4aXN0cykuCisgICAgICAgIDMuIEl0IHN0b3BzIHVzaW5n
IHRoZSBwbGlzdCBpbiBmYXZvciBvZiB0aGUgZGF0YWJhc2UuCisgICAgICAgIDQuIEl0IGRvZXMg
cXVlcmllcyBhbmQgb3RoZXIgb3BlcmF0aW9ucyB1c2luZyB0aGUgZGF0YWJhc2UgaW5zdGVhZCBv
ZiB0aGUgb2xkIGhhc2ggdGFibGUKKyAgICAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAg
ICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGV4aXNpdGluZyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUgY2xhc3MgaW50byBhIGJhc2UKKyAgICAgICAgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlIGNsYXNzLCB3aGljaCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUgaXMgYmFzZWQgb24uCisgICAgICAgIEl0IGFkZHMgYSBuZXcgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUgdGhhdCBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBTUUwKKyAg
ICAgICAgb3BlcmF0aW9ucy4KKworICAgICAgICBUaGVzZSBjb2RlIGNoYW5nZXMgc2hvdWxkIG5v
dCBoYXZlIGFueSBpbXBhY3Qgb24gZXhpc3Rpbmcgb3BlcmF0aW9ucywgYW5kIHdoZW4gZW5hYmxl
ZAorICAgICAgICBzaG91bGQgcHJvZHVjZSB0aGUgc2FtZSB0ZXN0IHJlc3VsdHMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
cmVhdGVTY2hlbWEpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVudHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRp
b25zaGlwRXhpc3RzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb25maXJtRG9tYWlu
RG9lc05vdEV4aXN0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmRhdGFiYXNlSXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9y
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0
ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRS
ZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtB
c1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6
bGlzdFRvU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5j
U3RvcmFnZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2
YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291
cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1wUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZh
bGVudFJlc291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0
ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVz
b3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0dyYW5kZmF0aGVyZWQgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZy
b20pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4pOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXIpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2ll
VHJlYXRtZW50Rm9yT3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZG9tYWluc1RvQmxvY2sgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRl
Q29va2llQmxvY2tpbmdGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJv
Y2Vzc1N0YXRpc3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJldmFsZW50RG9tYWlucyBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJlZFVz
ZXJJbnRlcmFjdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9ucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdy
YW5kZmF0aGVyaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnRvcFByaXZhdGVseUNvbnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRl
RGF0YUZvcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vl
bik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JE
b21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3Jh
Z2VJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6
OmRvbWFpbnNUb1N0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0Rh
dGU6OmZyb21XYWxsVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0Rh
dGU6OnRvZGF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vj
b25kc1NpbmNlRXBvY2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3Bl
cmF0aW5nRGF0ZTo6b3BlcmF0b3I8IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGluZ0RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjptZXJnZU9wZXJhdGluZ0RhdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Y29t
cHV0ZUltcG9ydGFuY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpw
cm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5n
V2Vic2l0ZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzY2hlZHVsZVN0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVw
ZGF0ZUNhY2hlTWF4QWdlQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURh
dGFSZWNvcmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OmRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0YXRpc3RpY3NF
eHBpcmVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1
bmVFbnRyaWVzRG93blRvKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmxvZ1Rlc3RpbmdFdmVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxl
dGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNEZWJ1Z01vZGVFbmFibGVkIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzdG9yZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVk
LgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6
CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZSk6CisgICAgICAg
IChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnRvZGF5KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0
aW5nRGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVy
YXRpbmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5n
RGF0ZTo6b3BlcmF0b3I8IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
b3BlcmF0b3I8PSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYWxjdWxh
dGVBbmRTdWJtaXRUZWxlbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNvbXB1dGVJbXBvcnRhbmNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxk
U3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlz
dGluZ1dlYnNpdGVEYXRhKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZv
ckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNh
cCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0QWdl
Q2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVj
b3JkcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NFcGlyYXRpb25UaW1lIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZU9wZXJh
dGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1h
eFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGlu
Z0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZW1vdmVBbGxTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmguCisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGluZ0RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RvcmUg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQpOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29j
b2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRy
eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdl
QWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRh
c2tzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjps
b2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3Vy
Y2VSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRM
YXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5k
ZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JE
b21haW5zKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFu
ZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRy
aWVzRG93blRvKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycy5oOgorICAgICAgICAqIFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2xhc3NpZmllcjo6Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKToKKyAgICAg
ICAgKiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
Lmg6CisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogU291
cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJv
Y2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAyLTI1ICBKb2huIFdpbGFuZGVyICA8d2lsYW5kZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVjZSBhbmQgYWRvcHQgbmV3IGNsYXNzIFJlZ2lz
dHJhYmxlRG9tYWluIGZvciBlVExEKzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgKaW5kZXggNzE3NmQyZmY2YmU3NzZiOThmOWMyNTRlY2FjODYxZmIwYzAy
NjM3Yy4uNDY5MWM5MzllZDY0ZWVlMzRhODJiNzEwODk1Nzg1ODA0NjQzNTEzOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgs
OSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFi
bGVkKSB7IG1faXRwRGVidWdNb2RlID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01v
ZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQg
c2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBtX2l0cERhdGFiYXNl
TW9kZSA9IGlzRW5hYmxlZDsgfQorICAgIGJvb2wgaXRwRGF0YWJhc2VNb2RlRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXRwRGF0YWJhc2VNb2RlOyB9CisKICAgICB2b2lkIHNldFJlc3RyaWN0
ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1Jlc3RyaWN0ZWRIVFRQ
UmVzcG9uc2VBY2Nlc3MgPSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHJlc3RyaWN0ZWRIVFRQUmVz
cG9uc2VBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzdHJpY3RlZEhUVFBSZXNwb25zZUFj
Y2VzczsgfQogCkBAIC0zNTEsNyArMzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgbW91c2Vtb3Zl
RXZlbnRIYW5kbGluZ1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX21v
dXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkOyB9CiAgICAgdm9pZCBz
ZXRNb3VzZW1vdmVFdmVudEhhbmRsaW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZChib29sIGlzRW5h
YmxlZCkgeyBtX21vdXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkID0g
aXNFbmFibGVkOyB9CiAjZW5kaWYKLSAgICAKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzJiBzaGFyZWRGZWF0dXJlcygpOwogCiBwcml2YXRlOgpAQCAt
NTM0LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21vdXNlbW92ZUV2ZW50SGFuZGxp
bmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCisgICAgYm9vbCBt
X2l0cERhdGFiYXNlTW9kZSB7IGZhbHNlIH07CisKICAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZl
ckRlc3Ryb3llZDxSdW50aW1lRW5hYmxlZEZlYXR1cmVzPjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXggNTdkMmFkODY5ZDRkMjMxN2Fi
MDYzYjVkNmJhZTE0ZDllZjA5ZmE0Ni4uYzliMzEwMjQ0MjA3YmM3NjhmZWM5MjlmMDI1ZjA1NDZi
OTZiMDM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNl
LmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgdGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBjbGVhckFsbFRhYmxlcygp
OwotICAgIGludCBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgaW50IHJ1
blZhY3V1bUNvbW1hbmQoKTsKICAgICBpbnQgcnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7
CiAgICAgCiAgICAgYm9vbCB0cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBt
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGExOTNkOGMyNGIwYmQwMjQ5NjViYjEwNTQ0NjQyM2Ji
YzhmNWJmZTkuLmYzNjZjNzMwMmY0YmE1YTVmNGFjMWE2MWMxNjI2MzMxMzkzMmQzZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKQEAgLTc2LDcg
Kzc2LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRDb2x1bW5OYW1lKGludCBjb2wpOwogICAg
IFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0
cmluZyBnZXRDb2x1bW5UZXh0KGludCBjb2wpOwotICAgIGRvdWJsZSBnZXRDb2x1bW5Eb3VibGUo
aW50IGNvbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgZG91YmxlIGdldENvbHVtbkRvdWJsZShpbnQg
Y29sKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgZ2V0Q29sdW1uSW50KGludCBjb2wpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGludDY0X3QgZ2V0Q29sdW1uSW50NjQoaW50IGNvbCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGdldENvbHVtbkJsb2JBc1N0cmluZyhpbnQgY29sKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmIzMDI5ZDE5YmIzNGUwZWZmNDFjZGY5NzU5MDg1ZmIwN2UyOTk5MmMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0wLDAgKzEsMTU1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0
cnkuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9L
ZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgorI2luY2x1ZGUgPHd0
Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQs
IC4uLikgUkVMRUFTRV9MT0dfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgp
LCBOZXR3b3JrLCAiJXAgLSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hlY2tlcjo6IiBmbXQsIHRoaXMs
ICMjX19WQV9BUkdTX18pCisjZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoc2Vz
c2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1JfSUYoc2Vzc2lvbklELmlzQWx3YXlz
T25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBOZXR3b3JrSFRUUFNVcGdyYWRlQ2hl
Y2tlcjo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisKK1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSwg
Y29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5UGF0aCkKKyAgICA6IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZShzdG9yZSwgd29ya1F1ZXVlKQorICAgICwgbV9zdG9yYWdlRGlyZWN0b3J5
UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0aCArIFN0cmluZygiL29ic2VydmF0aW9ucy5kYiIpKQor
ICAgICwgbV9kYXRhYmFzZShtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPigp
KQorICAgICwgbV9vYnNlcnZlZERvbWFpbkNvdW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIENPVU5UKCopIEZST00gT2Jz
ZXJ2ZWREb21haW5zIl9zKSkKKyAgICAsIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQo
bWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCks
ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJlZ2lzdHJhYmxlRG9tYWluLCBsYXN0U2Vl
biwgaGFkVXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgZ3Jh
bmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZhbGVudCwgZGF0YVJlY29yZHNSZW1v
dmVkLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24sIHRpbWVz
QWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpIFZBTFVFUyAoPywgPywg
PywgPywgPywgPywgPywgPywgPywgPykiX3MpKQorICAgICwgbV9pbnNlcnRUb3BMZXZlbERvbWFp
blN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRh
YmFzZS5nZXQoKSwgIklOU0VSVCBJTlRPIFRvcExldmVsRG9tYWlucyBWQUxVRVMgKD8pIl9zKSkK
KyAgICAsIG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIGRvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAg
LCBtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2luc1N0YXRlbWVudChtYWtlVW5pcXVl
UmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJ
TlRPIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2lucyAoZG9tYWluSUQsIHRvcExldmVs
RG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBy
ZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zKSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUbyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5n
ZXQoKSwgIklOU0VSVCBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKHNvdXJjZURvbWFp
bklELCB0b0RvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJfcykpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9FeGlzdHMobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgPSA/IEFORCB0b0RvbWFpbklE
ID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8pKSJfcykpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSht
YWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwg
IklOU0VSVCBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQs
IGZyb21Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzRnJvbUV4aXN0cyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4o
bV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyBBTkQgZnJvbURvbWFp
bklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3Ry
YWJsZURvbWFpbiA9ID8pKSJfcykpCisgICAgLCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnMobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0
KCksICJJTlNFUlQgSU5UTyBTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIChzdWJGcmFtZURv
bWFpbklELCB0b3BGcmFtZURvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJP
TSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/
IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfcykpCisgICAgLCBtX3N1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zIChzdWJyZXNvdXJjZURvbWFpbklELCB0b3BGcmFtZURvbWFpbklEKSBTRUxF
Q1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zKSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3Rz
KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgp
LCAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklE
ID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8pKSJfcykpCisgICAgLCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8o
bWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCks
ICJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIChzdWJyZXNvdXJjZURv
bWFpbklELCB0b0RvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFp
bnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJfcykpCisgICAgLCBtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8g
QU5EIHRvRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zKSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50Piht
X2RhdGFiYXNlLmdldCgpLCAiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNG
cm9tIChzdWJyZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5J
RCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zKSkK
KyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzKG1ha2VVbmlxdWVS
ZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIEVY
SVNUUyAoU0VMRUNUIDEgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUg
c3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIGZyb21Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3Mp
KQorICAgICwgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVS
ZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9i
c2VydmVkRG9tYWlucyBTRVQgaGFkVXNlckludGVyYWN0aW9uID0gPywgbW9zdFJlY2VudFVzZXJJ
bnRlcmFjdGlvblRpbWUgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAg
LCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
bGFzdFNlZW4gPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX3Vw
ZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgaXNQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAg
LCBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgaXNQcmV2YWxlbnQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAs
IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVk
RG9tYWlucyBTRVQgaXNWZXJ5UHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3MpKQorICAgICwgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtYWtlVW5p
cXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVD
VCBpc1ZlcnlQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVE
b21haW4gPSA/Il9zKSkKKyAgICAsIG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCht
YWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwg
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMCwgaXNWZXJ5UHJldmFs
ZW50ID0gMCBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVI
YWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBo
YWRVc2VySW50ZXJhY3Rpb24gPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisg
ICAgLCBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBoYWRVc2VySW50ZXJh
Y3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX3VwZGF0ZU1vc3RSZWNl
bnRVc2VySW50ZXJhY3Rpb25UaW1lU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9t
YWluID0gPyJfcykpCisgICAgLCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQobWFrZVVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gPyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQobWFrZVVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxF
Q1QgZ3JhbmRmYXRoZXJlZCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQo
bWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCks
ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSA/IFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX3VwZGF0ZVRpbWVzQWNjZXNzZWRB
c0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvblN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlv
biA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBkYXRlVGlt
ZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSVN0YXRlbWVudChtYWtl
VW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQ
REFURSBPYnNlcnZlZERvbWFpbnMgU0VUIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0
b3JhZ2VBY2Nlc3NBUEkgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAg
LCBtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfcykpCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZWdpc3RlclVzZXJE
ZWZhdWx0c0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChb
dGhpcywgcGF0aCA9IG1fc3RvcmFnZURpcmVjdG9yeVBhdGguaXNvbGF0ZWRDb3B5KCldIHsKKyAg
ICAgICAgaWYgKCFtX2RhdGFiYXNlLT5vcGVuKHBhdGgpKSB7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5s
YXN0RXJyb3JNc2coKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFNpbmNlIHdlIGFyZSB1c2luZyBhIHdvcmtlclF1ZXVlLCB0aGUg
c2VxdWVudGlhbCBkaXNwYXRjaCBibG9ja3MgbWF5IGJlIGNhbGxlZCBieSBkaWZmZXJlbnQgdGhy
ZWFkcy4KKyAgICAgICAgbV9kYXRhYmFzZS0+ZGlzYWJsZVRocmVhZGluZ0NoZWNrcygpOworCisg
ICAgICAgIGlmICghbV9kYXRhYmFzZS0+dGFibGVFeGlzdHMoIk9ic2VydmVkRG9tYWlucyIpKSB7
CisgICAgICAgICAgICBpZiAoIWNyZWF0ZVNjaGVtYSgpKSB7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBt
X2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghcHJlcGFyZVN0
YXRlbWVudHMoKSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnByZXBhcmVTdGF0ZW1lbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cywg
ZGF0YWJhc2UgcGF0aDogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pOworCisg
ICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyldIHsKKyAgICAgICAgaWYgKHdlYWtUaGlzKQorICAgICAgICAgICAgd2Vha1RoaXMt
PmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgIH0pOworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IGZhbHNl
OworICAgIAorICAgIGF1dG8mIHN0YXRlbWVudCA9IGNvbnN0X2Nhc3Q8U1FMaXRlU3RhdGVtZW50
Jj4obV9vYnNlcnZlZERvbWFpbkNvdW50LmdldCgpKTsKKyAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDApID8gZmFsc2UgOiB0cnVlOworICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IHN0YXRlbWVu
dC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09
IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3JlYXRlU2NoZW1hKCkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNv
bW1hbmQoIkNSRUFURSBUQUJMRSBPYnNlcnZlZERvbWFpbnMgKGRvbWFpbklEIElOVEVHRVIgUFJJ
TUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQgTk9UIE5VTEwgVU5JUVVFIE9OIENPTkZM
SUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEwsIGhhZFVzZXJJbnRlcmFjdGlvbiBJTlRF
R0VSIE5PVCBOVUxMLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxM
LCBncmFuZGZhdGhlcmVkIElOVEVHRVIgTk9UIE5VTEwsIGlzUHJldmFsZW50IElOVEVHRVIgTk9U
IE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBkYXRhUmVjb3Jkc1JlbW92
ZWQgSU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlcklu
dGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCk7IikpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgY3JlYXRlIE9ic2VydmVkRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAo
JWkpIC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFi
YXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFRvcExldmVsRG9tYWlucyAodG9wTGV2
ZWxEb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05TVFJBSU5UIGZrRG9tYWluSUQgRk9S
RUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9t
YWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgVG9wTGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTdG9yYWdlIEFjY2VzcyBTdGF0
aXN0aWNzLgorICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJM
RSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMgKGRvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIHRvcExldmVsRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
LCBDT05TVFJBSU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkoZG9tYWluSUQpIFJFRkVSRU5DRVMg
T2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVko
dG9wTGV2ZWxEb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21h
aW5JRCkgT04gREVMRVRFIENBU0NBREUpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMgdGFibGUgaW4gZGF0
YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRv
cCBGcmFtZSBTdGF0aXN0aWNzLgorICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQo
IkNSRUFURSBUQUJMRSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChzb3VyY2VEb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIEZPUkVJR04gS0VZ
KHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFp
bklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNF
UyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyIp
KSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RF
cnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUg
VEFCTEUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICh0YXJnZXREb21haW5JRCBJTlRFR0VS
IE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgRk9SRUlHTiBLRVkodGFy
Z2V0RG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQp
IE9OIERFTEVURSBDQVNDQURFLCBGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMg
VG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiKSkg
eworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UtPmxhc3RF
cnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICAvLyBTdWJmcmFtZSBTdGF0aXN0aWNzLgorICAgIGlmICghbV9kYXRh
YmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVP
cmlnaW5zIChzdWJGcmFtZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWlu
SUQgSU5URUdFUiBOT1QgTlVMTCwgRk9SRUlHTiBLRVkoc3ViRnJhbWVEb21haW5JRCkgUkVGRVJF
TkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCBGT1JFSUdO
IEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZl
bERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMgdGFibGUgaW4gZGF0
YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFN1
YnJlc291cmNlIFN0YXRpc3RpY3MuCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFu
ZCgiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMgKHN1YnJlc291
cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VSIE5P
VCBOVUxMLCBGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2Vy
dmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsIEZPUkVJR04gS0VZKHRvcEZy
YW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQp
IE9OIERFTEVURSBDQVNDQURFKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgU3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkp
IC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNl
LT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8gKHN1YnJlc291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMLCBGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VT
IE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsIEZPUkVJR04gS0VZ
KHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxF
VEUgQ0FTQ0FERSk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0
ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gKHN1
YnJlc291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgZnJvbURvbWFpbklEIElOVEVHRVIg
Tk9UIE5VTEwsIEZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkoZnJv
bURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwg
bV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50cygp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIAorICAgIGlmICht
X29ic2VydmVkRG9tYWluQ291bnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVPcmlnaW5zU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20tPnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21F
eGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW5zLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy0+cHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbkV4
aXN0cy0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8tPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLT5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhp
c3RzLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlTGFzdFNlZW5T
dGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9tb3N0UmVjZW50
VXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNl
U3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fdXBkYXRlSGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlTW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWVTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50LT5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkU3RhdGVt
ZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlVGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgICkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVudHMgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4oY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCit7CisjaWZuZGVmIE5ERUJVRworICAg
IEFTU0VSVChjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJh
YmxlRG9tYWluKSk7CisjZW5kaWYKKworICAgIGlmIChtX2luc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LT5iaW5kVGV4dCgxLCBsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0
ZW1lbnQtPmJpbmREb3VibGUoMiwgbG9hZFN0YXRpc3RpY3MubGFzdFNlZW4uc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudC0+YmluZEludCgzLCBsb2FkU3RhdGlzdGljcy5oYWRVc2VySW50ZXJh
Y3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LT5iaW5kRG91YmxlKDQsIGxvYWRTdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoNSwgbG9hZFN0
YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0
T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoNiwgbG9hZFN0YXRpc3RpY3MuaXNQcmV2
YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWRE
b21haW5TdGF0ZW1lbnQtPmJpbmRJbnQoNywgbG9hZFN0YXRpc3RpY3MuaXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWlu
U3RhdGVtZW50LT5iaW5kSW50KDgsIGxvYWRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3ZlZCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmRJbnQoOSwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRv
VXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudC0+YmluZEludCgxMCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3Nl
ZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSkgIT0gU1FMSVRFX09LKSB7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRPYnNlcnZlZERvbWFp
biBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0
YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChtX2luc2VydE9i
c2VydmVkRG9tYWluU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGZh
aWxlZCB0byBjb21taXQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQg
PSBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50LCB1
bnNpZ25lZCBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc2Vjb25kRG9t
YWluKSBjb25zdAoreworICAgIGlmIChzdGF0ZW1lbnQuYmluZEludCgxLCBmaXJzdERvbWFpbklE
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDIsIHNlY29uZERv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX1JPVykgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bV9pbnNlcnREb21haW5SZWxhdGlvbnNoaXBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBjb25zdF9jYXN0PFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSkubGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVtZW50LmdldENvbHVtbkludCgwKSA/IHRy
dWUgOiBmYWxzZTsKKworICAgIGludCByZXNldFJlc3VsdCA9IHN0YXRlbWVudC5yZXNldCgpOwor
ICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7
CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCYgc3RhdGVtZW50LCB1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHRvcEZyYW1lKQoreworICAgIGlmIChzdGF0ZW1lbnQuYmluZEludCgxLCBkb21h
aW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgyLCB0b3BG
cmFtZS5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om1faW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwU3RhdGVtZW50IGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHJlc2V0UmVzdWx0ID0gc3RhdGVtZW50LnJlc2V0
KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRF
X09LKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmbmRlZiBOREVCVUcKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1Eb21haW5Eb2VzTm90
RXhpc3QoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBpZiAo
bV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNz
YWdlOiAle3B1YmxpY31zIiwgdGhpcywgY29uc3RfY2FzdDxXZWJDb3JlOjpTUUxpdGVEYXRhYmFz
ZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAg
ICAgCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5zdGVwKCkgPT0gU1FM
SVRFX1JPVykgeworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmlu
Z1N0YXRlbWVudC0+cmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwg
cmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5y
ZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNR
TElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordW5zaWduZWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklEKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgdW5zaWduZWQgZG9tYWluSUQgPSAw
OworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBk
b21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2RvbWFpbklERnJvbVN0
cmluZ1N0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklERnJvbVN0cmluZyBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBjb25zdF9jYXN0PFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSkubGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZG9tYWluSUQ7CisgICAg
fQorCisgICAgZG9tYWluSUQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+Z2V0Q29s
dW1uSW50KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdT
dGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRS
ZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAKKyAgICByZXR1cm4gZG9tYWluSUQ7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0
aW9uc2hpcHMoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRp
c3RpY3MpCit7CisgICAgYXV0byByZWdpc3RyYWJsZURvbWFpbklEID0gZG9tYWluSUQobG9hZFN0
YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4pOworICAgIGZvciAoY29uc3QgYXV0byYgdG9wRnJh
bWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdp
bnMpCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N0b3JhZ2VBY2Nlc3NVbmRl
clRvcEZyYW1lT3JpZ2luc1N0YXRlbWVudC5nZXQoKSwgcmVnaXN0cmFibGVEb21haW5JRCwgUmVn
aXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pKTsKKworICAgIGZvciAoY29uc3QgYXV0byYg
dG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
KQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvLmdldCgpLCByZWdpc3RyYWJsZURvbWFpbklELCBSZWdpc3RyYWJsZURvbWFpbih0b3BG
cmFtZURvbWFpbi5rZXkpKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRvcEZyYW1lRG9t
YWluIDogbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKQorICAgICAg
ICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20u
Z2V0KCksIHJlZ2lzdHJhYmxlRG9tYWluSUQsIFJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9t
YWluLmtleSkpOworICAgIAorICAgIGZvciAoY29uc3QgYXV0byYgdG9wRnJhbWVEb21haW4gOiBs
b2FkU3RhdGlzdGljcy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zKQorICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmdldCgp
LCByZWdpc3RyYWJsZURvbWFpbklELCBSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbi5r
ZXkpKTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9hZFN0
YXRpc3RpY3Muc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucykKKyAgICAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5nZXQo
KSwgcmVnaXN0cmFibGVEb21haW5JRCwgUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4u
a2V5KSk7CisgICAgCisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRT
dGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pCisgICAgICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uZ2V0KCksIHJl
Z2lzdHJhYmxlRG9tYWluSUQsIFJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluLmtleSkp
OworICAgIAorICAgIGZvciAoY29uc3QgYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlz
dGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCisgICAgICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgcmVn
aXN0cmFibGVEb21haW5JRCwgUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4ua2V5KSk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRl
RnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYg
bWVtb3J5U3RvcmUpCit7CisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCB3ZWFrTWVt
b3J5U3RvcmUgPSBtYWtlV2Vha1B0cihtZW1vcnlTdG9yZSldIHsKKyAgICAgICAgaWYgKCF3ZWFr
TWVtb3J5U3RvcmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFpc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byYgc3RhdGlzdGlj
c01hcCA9IHdlYWtNZW1vcnlTdG9yZS0+ZGF0YSgpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8m
IHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXApCisgICAgICAgICAgICBpbnNlcnRPYnNlcnZlZERv
bWFpbihzdGF0aXN0aWMudmFsdWUpOworCisgICAgICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNz
IGZvciBpbnRlci1kb21haW4gcmVsYXRpb25zaGlwcyBzbyB3ZQorICAgICAgICAvLyBjYW4gcmVm
ZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwKQorICAgICAgICAgICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMudmFsdWUpOworCisgICAgICAgIG1fZGF0YWJhc2Ut
PnJ1blZhY3V1bUNvbW1hbmQoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FKDE5NTA4
OCk6IEltcGxlbWVudCBmb3IgRGF0YWJhc2UgdmVyc2lvbi4KK30KKworc3RhdGljIFN0cmluZyBk
b21haW5zVG9TdHJpbmcoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMp
Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byBkb21haW5OYW1l
IDogZG9tYWlucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIlwiIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbk5hbWUuc3RyaW5nKCkp
OworICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlwiIik7CisgICAgfQorCisgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJp
bmcoY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkb21haW5zKQoreworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gZG9tYWluTmFtZSA6IGRvbWFpbnMpIHsKKyAgICAgICAg
aWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOworICAgICAgICBi
dWlsZGVyLmFwcGVuZChkb21haW5OYW1lKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJcIiIpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNv
cmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFN0cmluZz4mJiBkb21haW5zKQorewor
ICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZS5n
ZXQoKSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZGF0YVJlY29yZHNS
ZW1vdmVkID0gZGF0YVJlY29yZHNSZW1vdmVkICsgMSBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiBJ
TiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBpZiAoZG9tYWluc1Rv
VXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JN
KENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50U3RhdGlzdGljc0ZvckRvbWFp
bnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+
bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordW5zaWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0Rv
bWFpbih1bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZh
bGVudFJlZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChudW1iZXJPZlJl
Y3Vyc2l2ZUNhbGxzID49IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VC
YWNrKSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJIaXQg
JXUgcmVjdXJzaXZlIGNhbGxzIGluIHJlZGlyZWN0IGJhY2t0cmFjZS4gUmV0dXJuaW5nIGVhcmx5
LiIsIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrKTsKKyAgICAg
ICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisgICAgfQorICAgIAorICAgIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHMrKzsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbmV3bHlJZGVudGlm
aWVkRG9tYWluczsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFN1YnJlc291cmNlcyhtX2RhdGFi
YXNlLmdldCgpLCBtYWtlU3RyaW5nKCJTRUxFQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNG
cm9tLmZyb21Eb21haW5JRCBmcm9tIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5F
UiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHN1YnJlc291cmNl
RG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcihwcmltYXJ5RG9tYWluSUQpLCAiQU5EIE9ic2Vy
dmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDAiKSk7CisgICAgaWYgKGZpbmRTdWJyZXNvdXJjZXMu
cHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoZmluZFN1YnJlc291cmNl
cy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgYXV0byBuZXdEb21haW4gPSBm
aW5kU3VicmVzb3VyY2VzLmdldENvbHVtbkludCgwKTsKKyAgICAgICAgICAgIGF1dG8gaW5zZXJ0
UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW4p
OworICAgICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICAgICAg
bmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBmaW5kVG9wRnJhbWVzKG1fZGF0YWJhc2UuZ2V0KCks
IG1ha2VTdHJpbmcoIlNFTEVDVCBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFp
bklEIGZyb20gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSAiLCBTdHJpbmc6Om51
bWJlcihwcmltYXJ5RG9tYWluSUQpLCAiQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9
IDAiKSk7CisgICAgaWYgKGZpbmRUb3BGcmFtZXMucHJlcGFyZSgpID09IFNRTElURV9PSykgewor
ICAgICAgICB3aGlsZSAoZmluZFRvcEZyYW1lcy5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAg
ICAgICAgICAgYXV0byBuZXdEb21haW4gPSBmaW5kVG9wRnJhbWVzLmdldENvbHVtbkludCgwKTsK
KyAgICAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25T
b3VyY2VzLmluc2VydChuZXdEb21haW4pOworICAgICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5z
ZWNvbmQpCisgICAgICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3
RG9tYWluKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZXdseUlkZW50aWZpZWREb21h
aW5zLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisg
ICAgZm9yIChhdXRvIGRvbWFpbklEIDogbmV3bHlJZGVudGlmaWVkRG9tYWlucykKKyAgICAgICAg
bnVtYmVyT2ZSZWN1cnNpdmVDYWxscyA9IHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFp
bnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbihkb21haW5JRCwgbm9uUHJldmFsZW50UmVkaXJl
Y3Rpb25Tb3VyY2VzLCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKworICAgIHJldHVybiBudW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcmF0b3JUeXBl
Pgorc3RhdGljIFN0cmluZyBidWlsZExpc3QoY29uc3QgV1RGOjpJdGVyYXRvclJhbmdlPEl0ZXJh
dG9yVHlwZT4mIHZhbHVlcykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9y
IChhdXRvIGRvbWFpbklEIDogdmFsdWVzKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5
KCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTnVtYmVyKGRvbWFpbklEKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIu
dG9TdHJpbmcoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU3RkU2V0PHVuc2lnbmVkPiBwcmV2YWxl
bnREdWVUb1JlZGlyZWN0OworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVJlZGlyZWN0
U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKSwg
IlNFTEVDVCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1YnJlc291cmNl
RG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWRE
b21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJf
cyk7CisgICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNR
TElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3Qu
aW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAg
ICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudChjb25z
dF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksICJTRUxFQ1QgRElTVElO
Q1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9NIFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5z
LmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNl
cnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJhbWVSZWRpcmVj
dFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlICh0b3BG
cmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAg
cHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgp
KSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAx
IFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNl
dDx1bnNpZ25lZD46Oml0ZXJhdG9yPihwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmJlZ2luKCksIHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKG1hcmtQcmV2YWxl
bnRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9Q
cmV2YWxlbnQgZmFpbGVkIHRvIGV4ZWN1dGUsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0
aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitIYXNoTWFwPHVuc2lnbmVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Tm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJldmFsZW50UmVz
b3VyY2VzKCkKK3sKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzPiByZXN1bHRzOworCisgICAgU1FMaXRlU3RhdGVtZW50IG5vdFZlcnlQcmV2YWxlbnRSZXNv
dXJjZXNTdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0
KCkpLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYg
KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9P
SykgeworICAgICAgICB3aGlsZSAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFsdWUo
eyBSZWdpc3RyYWJsZURvbWFpbihub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50Lmdl
dENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzU3RhdGVtZW50LmdldENvbHVtbkludCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6Okhp
Z2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3cKKyAgICAgICAgICAgICAgICAsIDAsIDAs
IDAsIDAgfSk7CisgICAgICAgICAgICByZXN1bHRzLmFkZChrZXksIHZhbHVlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gdmFs
dWUgOiByZXN1bHRzLmtleXMoKSkgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVy
LmFwcGVuZE51bWJlcih2YWx1ZSk7CisgICAgfQorCisgICAgYXV0byBkb21haW5JRHNPZkludGVy
ZXN0ID0gYnVpbGRlci50b1N0cmluZygpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudFN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURh
dGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJj
ZURvbWFpbklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURz
T2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAo
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNDb3VudFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAg
dW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1
ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50U3RhdGVtZW50LmdldENv
bHVtbkludCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRl
RGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJlc291
cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZkludGVy
ZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9P
SykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21h
aW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVz
dWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zQ291bnRTdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2Uu
Z2V0KCkpLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9w
RnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zIFdIRVJF
IHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQ
IEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAg
IHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnRTdGF0ZW1lbnQuc3RlcCgp
ID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudFN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZp
bmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQor
ICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
c0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksIG1ha2VTdHJp
bmcoIlNFTEVDVCBzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNP
ZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAodG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgd2hpbGUgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3Rh
dGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3Vs
dHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5k
KCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gcmVzdWx0czsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgPSBmaW5kTm90
VmVyeVByZXZhbGVudFJlc291cmNlcygpOworCisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRp
c3RpYyA6IG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMudmFsdWVzKCkpIHsKKyAgICAgICAgYXV0
byBuZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxj
dWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lT3JpZ2luc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFt
ZU9yaWdpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsKKyAgICAgICAgaWYgKG5ld1By
ZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkKKyAgICAgICAgICAgIHNl
dFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdGVyYWJsZURvbWFpbiwg
bmV3UHJldmFsZW5jZSk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpCit7CisgICAgZW5zdXJl
UHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgbWFya0FzUHJldmFsZW50SWZI
YXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKKyAgICByZWNsYXNzaWZ5UmVzb3VyY2VzKCk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9yYWdl
SWZOZWVkZWQoKQoreworICAgIG1fZGF0YWJhc2UtPnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c3luY1N0b3JhZ2VJbW1l
ZGlhdGVseSgpCit7CisgICAgbV9kYXRhYmFzZS0+cnVuVmFjdXVtQ29tbWFuZCgpOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNz
KGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mIHRvcEZyYW1lRG9tYWluLCBPcHRpb25hbDxGcmFtZUlEPiBmcmFtZUlELCBQYWdlSUQgcGFn
ZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworCisgICAgc3dp
dGNoIChjb29raWVUcmVhdG1lbnRGb3JPcmlnaW4oc3ViRnJhbWVEb21haW4pKSB7CisgICAgY2Fz
ZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kUHVyZ2U6CisgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRt
ZW50UmVzdWx0OjpCbG9ja0FuZEtlZXA6CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHRydWUp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkFsbG93
OgorICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc3ViRnJh
bWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4g
PSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBzdG9yZS0+Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVE
b21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgW3N0b3JlID0g
c3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlz
dGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIHJlc3VsdF0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIocmVzdWx0KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVz
dFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVE
b21haW4mJiB0b3BGcmFtZURvbWFpbiwgRnJhbWVJRCBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBi
b29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0
YXR1cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworCisgICAgc3dpdGNoIChj
b29raWVUcmVhdG1lbnRGb3JPcmlnaW4oc3ViRnJhbWVEb21haW4pKSB7CisgICAgY2FzZSBDb29r
aWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kUHVyZ2U6IHsKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQs
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJkLXBh
cnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24gYXMg
Zmlyc3QtcGFydHkuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisj
ZW5kaWYKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fu
bm90UmVxdWVzdEFjY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZEtlZXA6IHsKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJs
ZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFn
ZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUgbm90IGJsb2NrZWQg
aW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vz
c1N0YXR1czo6SGFzQWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkFsbG93OgorICAgICAgICAvLyBEbyBub3RoaW5nCisg
ICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICBhdXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIg
PSBwcm9tcHRFbmFibGVkICYmIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9t
cHQoc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKHByb21w
dEVuYWJsZWQgJiYgIXVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJs
ZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIGFzayB0aGUgdXNlciB3
aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHVu
ZGVyICV7cHVibGljfXMgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OlJlcXVpcmVzVXNl
clByb21wdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodXNlcldhc1Byb21w
dGVkRWFybGllcikgeworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICBSRUxFQVNF
X0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnLCAiU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJXtwdWJsaWN9cyB1bmRlciAl
e3B1YmxpY31zLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZy
YW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgfQorCisgICAg
U1FMaXRlU3RhdGVtZW50IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZS5nZXQoKSwg
bWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlE
dWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJFIGRvbWFpbklEID0gIiwgU3RyaW5nOjpudW1i
ZXIoc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSkpOworICAgIGlmIChpbmNyZW1lbnRTdG9yYWdlQWNj
ZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFj
Y2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRp
ZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgZ3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9w
RnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCB3YXNH
cmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3Jh
bnRlZEFjY2VzcyA/IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nl
c3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOworICAgIH0pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVy
T3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcywgT3BlbmVyUGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3BlbmVy
RG9tYWluKQoreworICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3Bl
bmVyRG9tYWluKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPT0gb3BlbmVyRG9tYWluKQorICAgICAgICByZXR1
cm47CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpOworCisgICAgaWYgKGNvb2tpZVRyZWF0bWVudEZv
ck9yaWdpbihkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpICE9IENvb2tpZVRyZWF0bWVudFJl
c3VsdDo6QWxsb3cpCisgICAgICAgIHJldHVybjsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9y
YWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtwdWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBm
cm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRv
dy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
b3BlbmVyRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgZ3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Mp
LCBXVEZNb3ZlKG9wZW5lckRvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVyUGFnZUlELCBmYWxz
ZSwgW10oYm9vbCkgeyB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21h
aW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBpZiAodXNlcldhc1Byb21wdGVkTm93KSB7CisgICAgICAgIGF1
dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5m
aXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOworICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVy
YWN0aW9uKHN1YkZyYW1lRG9tYWluKSk7CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hp
cChtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2luc1N0YXRlbWVudC5nZXQoKSwgc3Vi
RnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgfQorCisgICAgZ3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9w
RnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYm
IHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBPcHRpb25h
bDxGcmFtZUlEPiBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5v
d09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzdWJGcmFtZURvbWFp
biA9PSB0b3BGcmFtZURvbWFpbikgeworICAgICAgICBjYWxsYmFjayh0cnVlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9zdG9yYWdlQWNjZXNzUHJv
bXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdlciBleHBlcmltZW50YWwu
CisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBtX3N0b3JhZ2VBY2Nlc3NQ
cm9tcHRzRW5hYmxlZCkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYXV0byBzdWJGcmFtZVN0
YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZy
YW1lRG9tYWluKTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09IEFkZGVk
UmVjb3JkOjpObyk7CisgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3ViRnJh
bWVEb21haW4pKTsKKyAgICAgICAgQVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Ro
cm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikpOworI2Vu
ZGlmCisgICAgICAgIHNldFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdHJ1ZSwgV2Fs
bFRpbWU6Om5vdygpKTsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N1
YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9t
YWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgc3Rv
cmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11
dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIoc3Vi
RnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKV0oYm9vbCB2YWx1ZSkg
bXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2go
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHZhbHVlXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgfSk7CisKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPiYgZG9tYWlucykKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3Rh
dGVtZW50KG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBk
b21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpCit7CisgICAgaWYg
KCFtX2RlYnVnTW9kZUVuYWJsZWQpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21haW5zVG9CbG9jazsKKyAgICBwcmltYXJ5RG9t
YWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKworICAgIGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVidWdTdGF0aWNQcmV2YWxlbnRS
ZXNvdXJjZSk7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UobV9kZWJ1Z1N0YXRpY1ByZXZhbGVu
dFJlc291cmNlLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICBwcmltYXJ5RG9t
YWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJj
ZSk7CisKKyAgICBpZiAoIW1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
bV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICAgICAgc2V0UHJldmFsZW50UmVz
b3VyY2UobV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLCBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpIaWdoKTsKKyAgICAgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVu
ZChtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOworI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
ZywgIkRpZCBzZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJw
b3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2Uu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gcHJp
bWFyeURvbWFpbnNUb0Jsb2NrOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRh
cmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBib29sIGlzUmVkaXJlY3QsIGJvb2wg
aXNNYWluRnJhbWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBi
b29sIGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWluID09
IHRvcEZyYW1lRG9tYWluOworICAgIGJvb2wgYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVT
aXRlID0gdGFyZ2V0RG9tYWluID09IHNvdXJjZURvbWFpbjsKKworICAgIGJvb2wgc3RhdGlzdGlj
c1dlcmVVcGRhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc01haW5GcmFtZSAmJiAhKGFyZVRhcmdl
dEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8IGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNT
YW1lU2l0ZSkpIHsKKyAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOworICAgICAgICB1cGRh
dGVMYXN0U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M6OnJlZHVjZVRp
bWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOworCisgICAgICAgIGlmICghcmVsYXRpb25z
aGlwRXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLmdldCgpLCB0YXJn
ZXRSZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICAgICAgICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuZ2V0KCksIHRh
cmdldFJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAgICAgICAgIHN0YXRpc3Rp
Y3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNSZWRp
cmVjdCAmJiAhYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSB7CisgICAgICAgIGlm
IChpc01haW5GcmFtZSkgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ09yaWdpblJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURv
bWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9FeGlzdHMuZ2V0KCksIHJlZGlyZWN0aW5nT3JpZ2luUmVzdWx0LnNlY29u
ZCwgdGFyZ2V0RG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uZ2V0KCksIHJlZGlyZWN0aW5nT3JpZ2lu
UmVzdWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNz
V2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRh
cmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHRhcmdldERvbWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3Rv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cy5nZXQoKSwgdGFyZ2V0UmVzdWx0LnNlY29u
ZCwgc291cmNlRG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgdGFyZ2V0UmVzdWx0LnNl
Y29uZCwgc291cmNlRG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
YXV0byByZWRpcmVjdGluZ09yaWdpblJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0
aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMuZ2V0KCks
IHJlZGlyZWN0aW5nT3JpZ2luUmVzdWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKSkgeworICAgICAg
ICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG8uZ2V0KCksIHJlZGlyZWN0aW5nT3JpZ2luUmVzdWx0LnNlY29uZCwgdGFyZ2V0RG9t
YWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgICAg
ICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbUV4aXN0cy5nZXQoKSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKSkgewor
ICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWlu
KTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXRpc3RpY3NXZXJlVXBkYXRl
ZCkKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2Fy
eSgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dT
dWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHRhcmdldERvbWFpbiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWlu
KTsKKyAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXREb21haW4sIGxhc3RTZWVuKTsKKworICAgIGF1
dG8gdGFyZ2V0RG9tYWluSUQgPSByZXN1bHQuc2Vjb25kOworICAgIGlmICghcmVsYXRpb25zaGlw
RXhpc3RzKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLmdldCgpLCB0YXJn
ZXREb21haW5JRCwgdG9wRnJhbWVEb21haW4pKSB7CisgICAgICAgIGluc2VydERvbWFpblJlbGF0
aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnMuZ2V0KCksIHRhcmdldERv
bWFpbklELCB0b3BGcmFtZURvbWFpbik7CisgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVk
aXJlY3RlZEZyb21Eb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWlu
JiB0YXJnZXREb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBhdXRvIHNvdXJjZURvbWFpblJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7CisgICAgYXV0byB0YXJnZXREb21haW5SZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXRE
b21haW4pOworCisgICAgYm9vbCBpc05ld1JlZGlyZWN0VG9FbnRyeSA9IGZhbHNlOworICAgIGlm
ICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0
cy5nZXQoKSwgc291cmNlRG9tYWluUmVzdWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKSkgeworICAg
ICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvLmdldCgpLCBzb3VyY2VEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pOworICAg
ICAgICBpc05ld1JlZGlyZWN0VG9FbnRyeSA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBpc05l
d1JlZGlyZWN0RnJvbUVudHJ5ID0gZmFsc2U7CisgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMo
bV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMuZ2V0KCksIHRhcmdldERvbWFp
blJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmdldCgpLCB0YXJnZXRE
b21haW5SZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pOworICAgICAgICBpc05ld1JlZGlyZWN0
RnJvbUVudHJ5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaXNOZXdSZWRpcmVjdFRvRW50cnkg
fHwgaXNOZXdSZWRpcmVjdEZyb21FbnRyeSkKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJv
Y2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lIG1vc3RSZWNl
bnRJbnRlcmFjdGlvbikKK3sKKyAgICBpZiAobV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3Rh
dGVtZW50LT5iaW5kSW50KDEsIGhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgfHwgbV9tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5iaW5kRG91YmxlKDIsIG1vc3RSZWNlbnRJ
bnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPmJpbmRUZXh0KDMs
IGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24sIGVy
cm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2co
KSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwg
cmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIHNl
dFVzZXJJbnRlcmFjdGlvbihkb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0VXNlckludGVy
YWN0aW9uKGRvbWFpbiwgZmFsc2UsIHsgfSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3Zl
U3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJERUxFVEUgRlJPTSBT
dG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMgV0hFUkUgZG9tYWluSUQgPSAiLCBTdHJp
bmc6Om51bWJlcih0YXJnZXRSZXN1bHQuc2Vjb25kKSkpOworICAgIGlmIChyZW1vdmVTdG9yYWdl
QWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFj
Y2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsK
KyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgaWYgKG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5i
aW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2hh
ZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX3VwZGF0ZVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uID0gbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPmdldENvbHVt
bkludCgwKSA/IHRydWUgOiBmYWxzZTsKKyAgICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50LT5nZXRDb2x1bW5Eb3VibGUoMSkpOworCisgICAgaWYgKGhhc1N0YXRpc3Rp
Y3NFeHBpcmVkKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSkgeworICAgICAgICAvLyBE
cm9wIHByaXZhY3kgc2Vuc2l0aXZlIGRhdGEgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCBpdC4K
KyAgICAgICAgLy8gU2V0IHRpbWVzdGFtcCB0byAwIHNvIHRoYXQgc3RhdGlzdGljcyBtZXJnZSB3
aWxsIGtub3cKKyAgICAgICAgLy8gaXQgaGFzIGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMg
ZGVmYXVsdCAtMS4KKyAgICAgICAgY2xlYXJVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAg
ICAgaGFkVXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiBo
YWRVc2VySW50ZXJhY3Rpb247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3VwZGF0ZVByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50LT5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3Vw
ZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5n
KCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgZmFp
bGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNl
dFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIGlmIChuZXdQcmV2YWxl
bmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKSB7CisgICAgICAgIGlmICht
X3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+YmluZEludCgxLCAxKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCB0byBi
aW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVy
cm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCByZXNldFJlc3VsdCA9
IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5yZXNldCgpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOwor
ICAgIH0KKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzOworICAgIHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbihkb21haW5JRChkb21haW4pLCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNv
dXJjZXMsIDApOworICAgIHNldERvbWFpbnNBc1ByZXZhbGVudChXVEZNb3ZlKG5vblByZXZhbGVu
dFJlZGlyZWN0aW9uU291cmNlcykpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRv
bWFpbnMpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCht
X2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBp
c1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJh
dG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbnMuYmVnaW4oKSwgZG9t
YWlucy5lbmQoKSkpLCAiKSIpKTsKKyAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0RG9tYWluc0FzUHJldmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30K
KworU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1wUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICAvLyBGSVhNRSgxOTUwODgpOiBJbXBsZW1lbnQgU1FMaXRlLWJhc2VkIGR1bXBp
bmcgcm91dGluZXMuCisgICAgQVNTRVJUKDApOworICAgIHJldHVybiB7IH07Cit9CisKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9t
YWluKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYgcHJlZGljYXRlU3RhdGVtZW50LCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIAorICAgIGlmIChwcmVkaWNhdGVTdGF0ZW1lbnQuYmluZFRleHQoMSwg
ZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcHJlZGljYXRlU3RhdGVt
ZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBjb25zdF9jYXN0PFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSkubGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgYm9vbCByZXN1bHQgPSBwcmVkaWNhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDAp
ID8gdHJ1ZSA6IGZhbHNlOworICAgIGludCByZXNldFJlc3VsdCA9IHByZWRpY2F0ZVN0YXRlbWVu
dC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09
IFNRTElURV9PSyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudC5nZXQoKSwgZG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihtX2lzVmVyeVBy
ZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmdldCgpLCBkb21haW4pOworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luRXhpc3RzLmdldCgpLCBkb21haW5JRChzdWJyZXNvdXJj
ZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1l
RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
cmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbkV4
aXN0cy5nZXQoKSwgZG9tYWluSUQoc3ViRnJhbWVEb21haW4pLCB0b3BGcmFtZURvbWFpbik7Cit9
CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJl
ZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYgcmVkaXJlY3RlZEZy
b21Eb21haW4sIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgcmVkaXJlY3RlZFRvRG9tYWluKSBj
b25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHJl
bGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMuZ2V0
KCksIGRvbWFpbklEKHJlZGlyZWN0ZWRGcm9tRG9tYWluKSwgcmVkaXJlY3RlZFRvRG9tYWluKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICAKKyAgICBpZiAobV9jbGVhclByZXZh
bGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9
cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNl
LmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0
ID0gbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5yZXNldCgpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgCisgICAgaWYgKG1fdXBkYXRlR3JhbmRm
YXRoZXJlZFN0YXRlbWVudC0+YmluZEludCgxLCB2YWx1ZSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBjb25zdF9jYXN0PFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSkubGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC0+cmVz
ZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJ
VEVfT0spOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
c0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBwcmVkaWNhdGVW
YWx1ZUZvckRvbWFpbihtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5nZXQoKSwgZG9tYWluKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisKKyAgICAvLyBG
b3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5
IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5S
ZWxhdGlvbnNoaXAobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLmdldCgpLCByZXN1bHQu
c2Vjb25kLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBT
dWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oc3VicmVzb3VyY2VEb21haW4pOworCisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtl
IHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHRvcCBmcmFtZSBk
b21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
dG9wRnJhbWVEb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lT3JpZ2lucy5nZXQoKSwgcmVzdWx0LnNlY29uZCwgdG9wRnJhbWVE
b21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1
YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291cmNlRG9t
YWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBh
IHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOworCisg
ICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
by5nZXQoKSwgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOworCisgICAgLy8gRm9yIGNv
bnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3Ig
dGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZ2V0KCksIHJlc3VsdC5zZWNv
bmQsIHJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9t
YWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWlu
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURv
bWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUg
YSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKKwor
ICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8u
Z2V0KCksIHJlc3VsdC5zZWNvbmQsIHJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERv
bWFpbiYgcmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFr
ZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBk
b21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
cmVkaXJlY3REb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNGcm9tLmdldCgpLCByZXN1bHQuc2Vjb25kLCByZWRpcmVjdERvbWFp
bik7Cit9CisKK3N0ZDo6cGFpcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
QWRkZWRSZWNvcmQsIHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGlmIChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+YmluZFRleHQoMSwg
ZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3Jk
OjpObywgMCB9OworICAgIH0KKyAgICAKKyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0
ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFpbklE
ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPmdldENvbHVtbkludCgwKTsKKworICAg
ICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+cmVz
ZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0g
U1FMSVRFX09LKTsKKyAgICAgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCBkb21haW5JRCB9
OworICAgIH0KKworICAgIGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3Rh
dGVtZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVz
dWx0ID09IFNRTElURV9PSyk7CisKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG5ld09ic2Vy
dmF0aW9uKGRvbWFpbik7CisgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4obmV3T2JzZXJ2YXRpb24p
OworCisgICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6OlllcywgZG9tYWluSUQoZG9tYWluKSB9Owor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVh
cigpOworICAgIG1fb3BlcmF0aW5nRGF0ZXMuY2xlYXIoKTsKKworICAgIGF1dG8gY2FsbGJhY2tB
Z2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworCisgICAgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhbY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKKworICAgIGF1dG8gcHJp
bWFyeURvbWFpbnNUb0Jsb2NrID0gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2Rl
KCk7CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKHByaW1hcnlEb21haW5zVG9C
bG9jaywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCld
IHsgfSk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpDb29raWVU
cmVhdG1lbnRSZXN1bHQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tp
ZVRyZWF0bWVudEZvck9yaWdpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25z
dAoreworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRh
YmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCBtYWtlU3RyaW5nKCJTRUxFQ1QgaXNQcmV2YWxlbnQs
IGhhZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJs
ZURvbWFpbiA9ICIsIGRvbWFpbi5zdHJpbmcoKSkpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9S
T1cpIHsKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNQcmV2YWxlbnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDAp
ID8gdHJ1ZSA6IGZhbHNlOworICAgIGlmICghaXNQcmV2YWxlbnQpCisgICAgICAgIHJldHVybiBD
b29raWVUcmVhdG1lbnRSZXN1bHQ6OkFsbG93OworCisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rp
b24gPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpID8gdHJ1ZSA6IGZhbHNlOworICAgIHJldHVy
biBoYWRVc2VySW50ZXJhY3Rpb24gPyBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2Vl
cCA6IENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTsKK30KKyAgICAKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFn
ZUFjY2Vzc1Rocm91Z2hQcm9tcHQodW5zaWduZWQgcmVxdWVzdGluZ0RvbWFpbklELCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbikgY29uc3QKK3sKKyAgICBhdXRvIGZp
cnN0UGFydHlQcmltYXJ5RG9tYWluSUQgPSBkb21haW5JRChmaXJzdFBhcnR5RG9tYWluKTsKKwor
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRhYmFzZSY+
KG1fZGF0YWJhc2UuZ2V0KCkpLCBtYWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdG9y
YWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMgV0hFUkUgZG9tYWluSUQgPSAiLCBTdHJpbmc6
Om51bWJlcihyZXF1ZXN0aW5nRG9tYWluSUQpLCAiIEFORCB0b3BMZXZlbERvbWFpbklEID0gIiwg
U3RyaW5nOjpudW1iZXIoZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkpKTsKKyAgICBpZiAoc3Rh
dGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3Rh
dGVtZW50LmdldENvbHVtbkludCgwKSA/IGZhbHNlIDogdHJ1ZTsKK30KKworVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWlu
c1RvQmxvY2soKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOworICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkp
LCAiU0VMRUNUIHJlZ2lzdHJhYmxlRG9tYWluIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlz
UHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LKQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAKKyAgICB3aGlsZSAoc3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChSZWdpc3RyYWJs
ZURvbWFpbihzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOworCisgICAgcmV0dXJuIHJlc3Vs
dHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0
ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9t
YWluc1RvQmxvY2sgPSB0aGlzLT5kb21haW5zVG9CbG9jaygpOworCisgICAgaWYgKGRvbWFpbnNU
b0Jsb2NrLmlzRW1wdHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fZGVidWdMb2dnaW5nRW5hYmxlZCAmJiAhZG9t
YWluc1RvQmxvY2suaXNFbXB0eSgpKQorICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMo
ImJsb2NrIiwgZG9tYWluc1RvQmxvY2spOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0Zv
ckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBz
dG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2Rl
YnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgdXBk
YXRpbmcgY29va2llIGJsb2NraW5nLiIpOworI2VuZGlmCisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKSBjb25zdAoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3Rp
YyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKQorICAgICAgICBwcm9jZXNzRnVu
Y3Rpb24ocmVzb3VyY2VTdGF0aXN0aWMpOworfQorCitWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OlByZXZhbGVudERvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcmV2YWxlbnREb21haW5zKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBWZWN0b3I8UHJldmFsZW50RG9tYWlu
RGF0YT4gcmVzdWx0czsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KGNvbnN0X2Nhc3Q8
U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKSwgIlNFTEVDVCBkb21haW5JRCwgcmVn
aXN0cmFibGVEb21haW4sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBoYWRVc2VySW50
ZXJhY3Rpb24sIGdyYW5kZmF0aGVyZWQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2
YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
CisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1lbnQuc3Rl
cCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhdGVtZW50LmdldENvbHVtbkludCgwKSkKKyAgICAgICAgICAgICwgUmVn
aXN0cmFibGVEb21haW4oc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAs
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDIpKQor
ICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisg
ICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKKyAg
ICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCitWZWN0b3I8
dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJl
ZFVzZXJJbnRlcmFjdGlvbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiByZXN1bHRzOworICAgIE9wdGlvbmFsPFNlY29u
ZHM+IGV4cGlyYXRpb25EYXRlVGltZSA9IHN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCk7CisgICAg
aWYgKCFleHBpcmF0aW9uRGF0ZVRpbWUpCisgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAg
YXV0byYgc3RhdGVtZW50ID0gY29uc3RfY2FzdDxTUUxpdGVTdGF0ZW1lbnQmPihtX2ZpbmRFeHBp
cmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmdldCgpKTsKKyAgICBpZiAoc3RhdGVtZW50LmJp
bmREb3VibGUoMSwgZXhwaXJhdGlvbkRhdGVUaW1lLnZhbHVlKCkudmFsdWUoKSkgIT0gU1FMSVRF
X09LKQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgIHdoaWxlIChzdGF0ZW1lbnQuc3Rl
cCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQoMCkpOworICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rp
b25zKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZXhw
aXJlZFJlY29yZHMgPSBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICBpZiAoZXhw
aXJlZFJlY29yZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGV4cGly
ZWRSZWNvcmRJRHMgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25l
ZD46Oml0ZXJhdG9yPihleHBpcmVkUmVjb3Jkcy5iZWdpbigpLCBleHBpcmVkUmVjb3Jkcy5lbmQo
KSkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyRXhwaXJlZEludGVyYWN0aW9uKG1fZGF0
YWJhc2UuZ2V0KCksIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gMCwgaGFkVXNlckludGVyYWN0aW9uID0gMSBXSEVS
RSBkb21haW5JRCBJTiAoIiwgZXhwaXJlZFJlY29yZElEcywgIikiKSk7CisgICAgaWYgKGNsZWFy
RXhwaXJlZEludGVyYWN0aW9uLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVy
bjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2Uu
Z2V0KCksIG1ha2VTdHJpbmcoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1l
T3JpZ2lucyAiLCBleHBpcmVkUmVjb3JkSURzLCAiKSIpKTsKKyAgICBpZiAocmVtb3ZlU3RvcmFn
ZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoY2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24uc3RlcCgpICE9IFNRTElURV9ET05FCisgICAgICAg
IHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24gZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4mJiBkb21haW5JRHNUb0NsZWFyKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbklEc1Rv
Q2xlYXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxpc3RUb0NsZWFy
ID0gYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRv
cj4oZG9tYWluSURzVG9DbGVhci5iZWdpbigpLCBkb21haW5JRHNUb0NsZWFyLmVuZCgpKSk7CisK
KyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudChtX2RhdGFi
YXNlLmdldCgpLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZh
dGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOworICAg
IGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitWZWN0
b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZh
dGhlcmluZyA9IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA+IFdhbGxUaW1lOjpub3co
KTsKKyAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JH
cmFuZGZhdGhlcmluZyAmJiBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CisKKyAgICBp
ZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKKyAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVy
aW5nVGltZXN0YW1wID0geyB9OworCisgICAgY2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9ucygp
OworICAgIAorICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJldmFsZW50UmVzb3VyY2Vz
OworCisgICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRhdGE+IHByZXZhbGVudERvbWFpbnMgPSB0
aGlzLT5wcmV2YWxlbnREb21haW5zKCk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBkb21haW5JRHNU
b0NsZWFyR3JhbmRmYXRoZXJpbmc7CisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBwcmV2YWxl
bnREb21haW5zKSB7CisgICAgICAgIGlmICghc3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiAm
JiAoIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgfHwgIXN0YXRpc3RpYy5ncmFuZGZhdGhl
cmVkKSkKKyAgICAgICAgICAgIHByZXZhbGVudFJlc291cmNlcy5hcHBlbmQoc3RhdGlzdGljLnJl
Z2lzdGVyYWJsZURvbWFpbik7CisKKyAgICAgICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJp
bmcgJiYgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQpCisgICAgICAgICAgICBkb21haW5JRHNUb0Ns
ZWFyR3JhbmRmYXRoZXJpbmcuYXBwZW5kKHN0YXRpc3RpYy5kb21haW5JRCk7CisgICAgfQorCisg
ICAgY2xlYXJHcmFuZGZhdGhlcmluZyhXVEZNb3ZlKGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhl
cmluZykpOworICAgIAorICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVl
ZGVkKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKKyAgICBhdXRvJiBzdGF0ZW1lbnQgPSBjb25zdF9jYXN0PFNRTGl0ZVN0YXRl
bWVudCY+KG1fb2JzZXJ2ZWREb21haW5Db3VudC5nZXQoKSk7CisgICAgaWYgKHN0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgY291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gc3RhdGVtZW50LnJlc2V0KCk7CisgICAg
QVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKwor
ICAgIGlmIChjb3VudCA8PSBtX3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAg
ICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRv
IDw9IG1fcGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisKKyAgICBzaXplX3QgY291
bnRMZWZ0VG9QcnVuZSA9IGNvdW50IC0gbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbzsK
KyAgICBBU1NFUlQoY291bnRMZWZ0VG9QcnVuZSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVj
b3Jkc1RvUHJ1bmUobV9kYXRhYmFzZS5nZXQoKSwgbWFrZVN0cmluZygiU0VMRUNUIGRvbWFpbklE
IEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2
YWxlbnQsIGxhc3RTZWVuIERFU0MgTElNSVQgIiwgU3RyaW5nOjpudW1iZXIoY291bnRMZWZ0VG9Q
cnVuZSkpKTsKKyAgICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSykg
eworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3Jr
LCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9k
YXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPiBl
bnRyaWVzVG9QcnVuZTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUuc3RlcCgpID09IFNRTElU
RV9ST1cpCisgICAgICAgIGVudHJpZXNUb1BydW5lLmFwcGVuZChyZWNvcmRzVG9QcnVuZS5nZXRD
b2x1bW5JbnQoMCkpOworCisgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChXVEY6Okl0
ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGVudHJpZXNUb1BydW5lLmJl
Z2luKCksIGVudHJpZXNUb1BydW5lLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcHJ1
bmVDb21tYW5kKG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOworICAg
IGlmIChwcnVuZUNvbW1hbmQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBwcnVu
ZUNvbW1hbmQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVw
ZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFdhbGxUaW1lIGxh
c3RTZWVuKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1f
dXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQtPmJpbmREb3VibGUoMSwgbGFzdFNlZW4uc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0
U2VlblN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5l
dHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVM
YXN0U2VlbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRS
ZXN1bHQgPSBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWluLCBXYWxs
VGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAg
IHNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVy
eUhpZ2gpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhjZmM4ZTk5ODBkMzBiYmQ1ODkyMThlZjExNzI4ODgxYTE4ZjQ3NjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKwor
I2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFu
ZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworY2xhc3MgU1FM
aXRlU3RhdGVtZW50Oworc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7
CisKKy8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0
aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KK2Ns
YXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIDogcHVibGljIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1ZXVl
JiwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisKKyAgICB2b2lkIHBvcHVs
YXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZSYpOworCisgICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJy
aWRlOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBwcm9j
ZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKT4mKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xhc3NpZnlQcmV2
YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSWZOZWVkZWQo
KSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsK
KworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRP
ZlN0b3JhZ2VBY2Nlc3MmJiwgT3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIGdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdp
c3RyYWJsZURvbWFpbj4mKSBvdmVycmlkZTsKKworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJl
Y3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIG92ZXJyaWRlOworICAgIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpIG92ZXJyaWRlOworICAgIGJvb2wgaXNHcmFuZGZh
dGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdWJGcmFtZURvbWFpbiYs
IGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BG
cmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYs
IGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9t
YWluJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFn
ZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYs
IEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGdyYW50U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQ
YWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKSBvdmVycmlkZTsKKworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5h
dmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRG
cm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKSBvdmVycmlkZTsK
KyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBXYWxsVGltZSBsYXN0U2Vlbikgb3ZlcnJpZGU7
CisgICAgdm9pZCBsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9t
YWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNs
ZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBv
dmVycmlkZTsKKworICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
LCBTZWNvbmRzKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBib29sIGluc2VydE9ic2VydmVk
RG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcHMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIGJv
b2wgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYsIHVu
c2lnbmVkIGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4p
OworICAgIGJvb2wgcmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYs
IHVuc2lnbmVkIGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmRE
b21haW4pIGNvbnN0OworICAgIHVuc2lnbmVkIGRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7CisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgY29uZmlybURvbWFpbkRvZXNO
b3RFeGlzdChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworI2VuZGlmCisgICAgdm9p
ZCB1cGRhdGVMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFdhbGxUaW1lKTsKKyAg
ICB2b2lkIHNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wg
aGFkVXNlckludGVyYWN0aW9uLCBXYWxsVGltZSk7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBkb21haW5zVG9CbG9jaygpIGNvbnN0OworCisgICAgc3RydWN0IFByZXZhbGVudERvbWFp
bkRhdGEgeworICAgICAgICB1bnNpZ25lZCBkb21haW5JRDsKKyAgICAgICAgUmVnaXN0cmFibGVE
b21haW4gcmVnaXN0ZXJhYmxlRG9tYWluOworICAgICAgICBXYWxsVGltZSBtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZTsKKyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb247CisgICAg
ICAgIGJvb2wgZ3JhbmRmYXRoZXJlZDsKKyAgICB9OworICAgIFZlY3RvcjxQcmV2YWxlbnREb21h
aW5EYXRhPiBwcmV2YWxlbnREb21haW5zKCkgY29uc3Q7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBm
aW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyRXhwaXJl
ZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICB2b2lkIGNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9y
PHVuc2lnbmVkPiYmKTsKKyAgICBib29sIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQodW5zaWduZWQgZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29u
c3Q7CisgICAgdm9pZCBpbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNo
U2V0PFN0cmluZz4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMo
KTsKKyAgICBzdHJ1Y3QgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB7CisgICAgICAgIFJlZ2lz
dHJhYmxlRG9tYWluIHJlZ2lzdGVyYWJsZURvbWFpbjsKKyAgICAgICAgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZSBwcmV2YWxlbmNlOworICAgICAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG9Db3VudDsKKyAgICAgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luc0NvdW50OworICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291
bnQ7CisgICAgfTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzPiBmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpOworCisgICAgYm9vbCBwcmVkaWNh
dGVWYWx1ZUZvckRvbWFpbihXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBDb29raWVUcmVhdG1lbnRSZXN1
bHQgeyBBbGxvdywgQmxvY2tBbmRLZWVwLCBCbG9ja0FuZFB1cmdlIH07CisgICAgQ29va2llVHJl
YXRtZW50UmVzdWx0IGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKKyAgICB1bnNpZ25l
ZCByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNE
b21haW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2
YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMp
OworICAgIHZvaWQgc2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7Cisg
ICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BG
cmFtZURvbWFpbiYmLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBib29sIHVzZXJXYXNQcm9t
cHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAg
dm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOworICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdN
b2RlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSBvdmVy
cmlkZTsKKyAgICBlbnVtIGNsYXNzIEFkZGVkUmVjb3JkIHsgTm8sIFllcyB9OworICAgIHN0ZDo6
cGFpcjxBZGRlZFJlY29yZCwgdW5zaWduZWQ+IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9y
KCkgb3ZlcnJpZGU7CisKKyAgICBib29sIGNyZWF0ZVNjaGVtYSgpOworICAgIGJvb2wgcHJlcGFy
ZVN0YXRlbWVudHMoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5
UGF0aDsKKyAgICBIYXNoTWFwPFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
cz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0
ZURhdGFiYXNlPiBtX2RhdGFiYXNlOworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fb2JzZXJ2ZWREb21haW5Db3VudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50OworICAgIFVuaXF1
ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0
ZW1lbnQ7CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lT3JpZ2luc1N0YXRlbWVu
dDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG87CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PiBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHM7CisgICAgVW5pcXVlUmVm
PFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb207
CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0czsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgbXV0YWJs
ZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbkV4aXN0czsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
PiBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnM7CisgICAgbXV0YWJsZSBVbmlxdWVS
ZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbkV4aXN0czsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHM7
CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb207CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0czsKKyAgICBV
bmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV91cGRhdGVMYXN0U2VlblN0YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50PiBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFi
bGUgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
dXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgVW5pcXVl
UmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2NsZWFy
UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudD4gbV91cGRhdGVIYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7CisgICAgbXV0
YWJsZSBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2hhZFVzZXJJbnRlcmFj
dGlvblN0YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBt
X3VwZGF0ZU1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lU3RhdGVtZW50OworICAgIFVuaXF1
ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRl
bWVudDsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1f
aXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+IG1fdXBkYXRlRGF0YVJlY29yZHNSZW1vdmVkU3RhdGVtZW50OworICAgIFVuaXF1
ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlVGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRlVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1
ZVRvU3RvcmFnZUFjY2Vzc0FQSVN0YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PiBtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAppbmRleCAzMDBjMTUxOWUyZjk1ZTEy
MDliNzAzYjRiOTNiYTdmMTRkYzQ4NjFhLi5lYjc4MzNhNmQ0NmFmNWRhNjdlOWEzZDU5M2IzYzc0
N2M0NzNiMzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlLmNwcApAQCAtNDksOTQgKzQ5LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogY29uc3RleHByIHVuc2lnbmVkIHN0YXRpc3RpY3NNb2Rl
bFZlcnNpb24geyAxNCB9OwotY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mUmVjdXJzaXZl
Q2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKLWNvbnN0ZXhwciBTZWNvbmRzIG1pbmlt
dW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Ci1jb25zdGV4cHIgdW5zaWdu
ZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OwotY29uc3RleHByIHVuc2lnbmVkIG1heElt
cG9ydGFuY2UgeyAzIH07Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLXN0YXRpYyBTdHJp
bmcgZG9tYWluc1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFp
bnMpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9tYWlu
IDogZG9tYWlucykgewotICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChk
b21haW4uc3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwot
fQotI2VuZGlmCi0KLWNsYXNzIE9wZXJhdGluZ0RhdGUgewotcHVibGljOgotICAgIE9wZXJhdGlu
Z0RhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRp
bWUoV2FsbFRpbWUgdGltZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBtcyA9IHRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMoKTsKLSAgICAgICAgaW50IHllYXIgPSBtc1RvWWVh
cihtcyk7Ci0gICAgICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICAg
ICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVh
cikpOwotICAgICAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURheUluWWVhcih5ZWFy
RGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLQotICAgICAgICByZXR1cm4gT3BlcmF0aW5nRGF0ZSB7
IHllYXIsIG1vbnRoLCBtb250aERheSB9OwotICAgIH0KLQotICAgIHN0YXRpYyBPcGVyYXRpbmdE
YXRlIHRvZGF5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlOjpmcm9tV2Fs
bFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAgICBTZWNvbmRzIHNlY29uZHNTaW5j
ZUVwb2NoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgZGF0ZVRvRGF5
c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBzZWNvbmRzUGVyRGF5IH07
Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVy
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250
aERheSAmJiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVh
cjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhl
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDwgb3Ro
ZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPD0oY29u
c3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc2Vj
b25kc1NpbmNlRXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250
aERheSkKLSAgICAgICAgOiBtX3llYXIoeWVhcikKLSAgICAgICAgLCBtX21vbnRoKG1vbnRoKQot
ICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCi0gICAgeyB9Ci0KLSAgICBpbnQgbV95ZWFy
IHsgMCB9OwotICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgotICAgIGludCBtX21v
bnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgotfTsKLQotc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdE
YXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhp
c3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpCi17Ci0gICAgaWYg
KGV4aXN0aW5nRGF0ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGTW92ZShuZXdEYXRl
cyk7Ci0KLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVyZ2VkRGF0ZXMoZXhpc3RpbmdEYXRl
cy5zaXplKCkgKyBuZXdEYXRlcy5zaXplKCkpOwotCi0gICAgLy8gTWVyZ2UgdGhlIHR3byBzb3J0
ZWQgdmVjdG9ycyBvZiBkYXRlcy4KLSAgICBzdGQ6Om1lcmdlKGV4aXN0aW5nRGF0ZXMuYmVnaW4o
KSwgZXhpc3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0ZXMuYmVnaW4oKSwgbmV3RGF0ZXMuZW5kKCks
IG1lcmdlZERhdGVzLmJlZ2luKCkpOwotICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZGF0ZXMuCi0g
ICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJnZWREYXRlcyk7Ci0KLSAgICAvLyBEcm9wIG9s
ZCBkYXRlcyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hlcyBvcGVyYXRpbmdEYXRlc1dpbmRv
dy4KLSAgICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4gb3BlcmF0aW5nRGF0ZXNXaW5kb3cp
Ci0gICAgICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKLQotICAgIHJldHVybiBtZXJnZWREYXRl
czsKLX0KIAogc3RydWN0IFN0YXRpc3RpY3NMYXN0U2VlbiB7CiAgICAgUmVnaXN0cmFibGVEb21h
aW4gZG9tYWluOwpAQCAtMTU1LDI2ICs2NywxNCBAQCBzdGF0aWMgdm9pZCBwcnVuZVJlc291cmNl
cyhIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgcwog
ICAgICAgICBzdGF0aXN0aWNzTWFwLnJlbW92ZShzdGF0aXN0aWNzVG9QcnVuZVtpXS5kb21haW4p
OwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCi17Ci0gICAgdW5zaWduZWQgaW1wb3J0
YW5jZSA9IG1heEltcG9ydGFuY2U7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZh
bGVudFJlc291cmNlKQotICAgICAgICBpbXBvcnRhbmNlIC09IDE7Ci0gICAgaWYgKCFyZXNvdXJj
ZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIGltcG9ydGFuY2UgLT0gMjsK
LSAgICByZXR1cm4gaW1wb3J0YW5jZTsKLX0KLQogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCi0gICAgOiBtX3N0
b3JlKHN0b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgIDogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUpCiB7CiAgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZWdpc3RlclVzZXJE
ZWZhdWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKLSAgICBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0Rh
dGVJZk5lY2Vzc2FyeSgpOwogCiAgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIoNV9zLCBb
d2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKICAgICAgICAgaWYgKHdlYWtUaGlzKQpA
QCAtMTgyLDkgKzgyLDkgQEAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2UKICAgICB9KTsKIH0KIAot
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlKCkKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpp
c0VtcHR5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBy
ZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpOwogfQogCiB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlJiBwZXJzaXN0ZW50U3RvcmFnZSkKQEAg
LTIwMCw3NSArMTAwLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdAogICAgICAgICBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJtaXQoKnRoaXMpOwogfQog
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Tm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZhbHVlKQordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21h
aW5zKEhhc2hTZXQ8U3RyaW5nPiYmIGRvbWFpbnMpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgbV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1l
dHJ5ID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2sp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIXNob3VsZFJl
bW92ZURhdGFSZWNvcmRzKCkpIHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIG1fYWN0aXZl
UGx1Z2luVG9rZW5zLmNsZWFyKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVn
aW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpCi0gICAgICAg
IG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsK
LSNlbmRpZgotCi0gICAgYXV0byBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSByZWdpc3RyYWJs
ZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCk7Ci0gICAgaWYgKHByZXZhbGVudFJlc291
cmNlRG9tYWlucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgcmV0
dXJuOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBhdXRvJiBz
dGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihS
ZWdpc3RyYWJsZURvbWFpbihkb21haW4pKTsKKyAgICAgICAgKytzdGF0aXN0aWMuZGF0YVJlY29y
ZHNSZW1vdmVkOwogICAgIH0KLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFJFTEVB
U0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJBYm91dCB0byByZW1vdmUgZGF0YSByZWNvcmRzIGZvciAle3B1YmxpY31zLiIs
IGRvbWFpbnNUb1N0cmluZyhwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLnV0ZjgoKS5kYXRhKCkp
OwotI2VuZGlmCi0KLSAgICBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCh0cnVlKTsKLQotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gY3Jv
c3NUaHJlYWRDb3B5KHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayksIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzaG91bGROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVl
LmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAg
ICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICB3ZWFrVGhpcy0+bV9zdG9yZS5kZWxldGVXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9t
YWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFp
bnMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgd29y
a1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0oY29uc3QgSGFzaFNldDxTdHJpbmc+JiBkb21h
aW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVl
dWUtPmRpc3BhdGNoKFtkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldICgpIG11dGFibGUgewotICAg
ICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNp
dGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IHdlYWtUaGlz
LT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihSZWdpc3RyYWJs
ZURvbWFpbiB7IGRvbWFpbiB9KTsKLSAgICAgICAgICAgICAgICAgICAgKytzdGF0aXN0aWMuZGF0
YVJlY29yZHNSZW1vdmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3ZWFr
VGhpcy0+c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoZmFsc2UpOwotICAgICAgICAgICAgICAg
IGNhbGxiYWNrKCk7Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHJlbW92aW5nIGRhdGEgcmVjb3Jkcy4iKTsK
LSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwogfQogCiB1bnNp
Z25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlY3Vyc2l2ZWx5R2V0QWxs
RG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
IGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVD
YWxscykgY29uc3QKQEAgLTMzNSw0NyArMTcyLDM0IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjppc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKFJlc291cmNlTG9hZFN0
CiAgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluID09IG1fZGVi
dWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB8fCByZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJs
ZURvbWFpbiA9PSBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7CiB9CiAKLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFS
ZWNvcmRzKCkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGFzc2lm
eVByZXZhbGVudFJlc291cmNlcygpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0
YVJlY29yZHNSZW1vdmFsKSB7Ci0gICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMg
OiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGlz
UHJldmFsZW50RHVlVG9EZWJ1Z01vZGUocmVzb3VyY2VTdGF0aXN0aWMpKQotICAgICAgICAgICAg
ICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlOjpIaWdoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVN0YXRpc3Rp
Yy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICAgICAgICAgIG1hcmtBc1ByZXZh
bGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlzdGljKTsKLSAgICAg
ICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNlID0gcmVzb3VyY2VTdGF0aXN0aWMuaXNQ
cmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJj
ZUxvYWRQcmV2YWxlbmNlOjpMb3c7Ci0gICAgICAgICAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNl
ID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNvdXJjZVBy
ZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKLSAgICAgICAg
ICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSBjdXJyZW50UHJldmFsZW5jZSkKLSAgICAgICAg
ICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIG5ld1By
ZXZhbGVuY2UpOwotICAgICAgICAgICAgfQorICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0
aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgeworICAgICAgICBpZiAoaXNQ
cmV2YWxlbnREdWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCisgICAgICAgICAgICBz
ZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZTo6SGlnaCk7CisgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRp
cmVjdGVkVG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOworICAgICAgICAgICAgYXV0byBj
dXJyZW50UHJldmFsZW5jZSA9IHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2Ug
PyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6
TG93OworICAgICAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0
aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKKyAgICAgICAgICAgIGlmIChuZXdQcmV2YWxlbmNl
ICE9IGN1cnJlbnRQcmV2YWxlbmNlKQorICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291
cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQcmV2YWxlbmNlKTsKICAgICAgICAgfQogICAgIH0K
K30KIAotICAgIHJlbW92ZURhdGFSZWNvcmRzKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKG1fcGVyc2lzdGVudFN0b3Jh
Z2UpCi0gICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1v
cnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1t
ZWRpYXRlV3JpdGU6Ok5vKTsKLQotICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy5zaG91bGROb3Rp
ZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZN
b3ZlKHdlYWtUaGlzKV0oKSB7Ci0gICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm47Cit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRl
ZCgpCit7CisgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVyc2lzdGVu
dFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6Tm8pOworfQogCi0gICAg
ICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9jZXNzZWQoKTsK
LSAgICAgICAgfSk7Ci0gICAgfSk7Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpCit7CisgICAgaWYgKG1fcGVyc2lzdGVudFN0
b3JhZ2UpCisgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9y
eVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1l
ZGlhdGVXcml0ZTo6WWVzKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1l
RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFs
PHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYgc3Vi
RnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9u
YWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIApAQCAtMzk5LDcgKzIyMyw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluCiAg
ICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBSZWdp
c3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9y
YWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFp
biYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBGcmFt
ZUlEIGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00NDAsNyArMjY0LDcg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdl
QWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYKICAgICB9KTsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIo
UmVnaXN0cmFibGVEb21haW4mJiBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIHVpbnQ2NF90
IG9wZW5lclBhZ2VJRCwgUmVnaXN0cmFibGVEb21haW4mJiBvcGVuZXJEb21haW4pCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRl
ck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiBkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MsIE9wZW5lclBhZ2VJRCBvcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmIG9wZW5l
ckRvbWFpbikKIHsKICAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzICE9IG9w
ZW5lckRvbWFpbik7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC00NjEsNyAr
Mjg1LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUmVnaXN0cmEKICAgICBncmFudFN0b3JhZ2VBY2Nlc3NJ
bnRlcm5hbChXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3Bl
bmVyRG9tYWluKSwgV1RGOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIGZhbHNlLCBbXShib29sKSB7
IH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJh
YmxlRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBh
Z2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21h
aW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKQEAgLTQ3Myw3ICsyOTcsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYg
cwogICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4p
LCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0
ZWROb3csIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFJlZ2lz
dHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYgdG9wRnJh
bWVEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJv
b2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNhbGxiYWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21h
aW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPEZyYW1lSUQ+IGZy
YW1lSUQsIFBhZ2VJRCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00OTksMzAgKzMyMywxMiBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoUmVn
aXN0cmFibGVEbwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVE
b21haW4+JiBkb21haW5zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0
YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCks
IHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5y
ZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldIChI
YXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFi
bGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3Zl
KHdlYWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSA9IGNyb3NzVGhyZWFkQ29weShkb21h
aW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKCkgbXV0
YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zV2l0
aFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IHdl
YWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW4pOwotICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3Jh
bmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJh
bWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsKLSAgICAgICAgICAgICAgICBpZiAod2Vha1RoaXMt
Pm1fcGVyc2lzdGVudFN0b3JhZ2UpCi0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX3Bl
cnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Olllcyk7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bG9n
VGVzdGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICB9KTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKKyAgICAg
ICAgYXV0byYgc3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oZG9tYWluKTsKKyAgICAgICAgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQgPSB0cnVl
OworICAgIH0KIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgp
CkBAIC01NDksNTUgKzM1NSw2IEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvCiAgICAgcmV0dXJu
IGRvbWFpbnNUb0Jsb2NrOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZSkKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAotICAgIGlmIChlbmFibGUpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnLCAiVHVybmVkIElUUCBEZWJ1ZyBNb2RlIG9uLiIpOwotI2VuZGlm
Ci0KLSAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7Ci0gICAgbV9kZWJ1Z0xvZ2dpbmdF
bmFibGVkID0gZW5hYmxlOwotCi0gICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdN
b2RlKCk7Ci0gICAgLy8gVGhpcyB3aWxsIGxvZyB0aGUgY3VycmVudCBjb29raWUgYmxvY2tpbmcg
c3RhdGUuCi0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10o
KSB7IH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbikKLXsKLSAgICBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBkb21haW47Ci19
Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzY2hlZHVsZVN0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElkZW50aWZpZXIgPSArK21fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXI7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIobWluaW11bVN0YXRpc3RpY3NQcm9j
ZXNzaW5nSW50ZXJ2YWwsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICptX3BlbmRpbmdTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFtX3BlbmRpbmdTdGF0aXN0aWNzUHJv
Y2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHx8ICptX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyICE9IHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCBoYXMgYmVlbiBjYW5jZWxlZC4KLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKFtdKCkgeyB9KTsKLSAgICAgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcygp
OwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0OwotfQotCiB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFt
ZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgYm9vbCBpc1Jl
ZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwpAQCAtNjM1LDcgKzM5Miw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21hCiAgICAgICAg
IHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9h
ZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25z
dCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQogewogICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwogCkBAIC02NDUsNyArNDAyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJs
ZUQKICAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2Fy
eSgpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nU3Vi
cmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJl
Y3RlZEZyb21Eb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiB0
YXJnZXREb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTY1
OCw3ICs0MTUsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9n
U3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZQogICAgICAgICBzY2hlZHVsZVN0
YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mIGRvbWFpbikK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzI4LDcgKzQ4NSw3IEBA
IGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxl
bnRSZXNvdXJjZSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2U7CiB9
CiAKLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1N1YnJlc291cmNlVW5kZXIoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291cmNlRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Citib29s
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29u
c3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03MzYsNyArNDkzLDcgQEAgYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihj
b25zdCBSZWcKICAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
ZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW5zLmNvbnRhaW5zKHRvcEZyYW1lRG9tYWluLnN0cmluZygpKTsKIH0KIAotYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJh
bWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc0
NCw3ICs1MDEsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIHJldHVybiBtYXBFbnRy
eSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZh
bHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnMuY29udGFpbnModG9wRnJhbWVEb21haW4u
c3RyaW5nKCkpOwogfQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRp
cmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0ZWRUb0Rv
bWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGly
ZWN0ZWRGcm9tRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0Rv
bWFpbikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzc3
LDcgKzUzNCw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAgICAgcmV0dXJuIG1hcEVudHJ5
ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFs
dWUuZ3JhbmRmYXRoZXJlZDsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURv
bWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWlu
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc4Nyw3ICs1NDQsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNv
bnN0IFJlZwogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHRvcEZyYW1lRG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BG
cmFtZURvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1
YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4p
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc5Nyw3ICs1NTQsNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0CiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVj
dERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODA3LDcg
KzU2NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnCiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERv
bWFpbiYgcmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKQEAgLTgxNyw3ICs1NzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUgogICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsK
IH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4s
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYg
cmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAg
LTgyNyw3ICs1ODQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdAogICAgIGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04
MzcsOTUgKzU5NCw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpCiAgICAgZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy50
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbChTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5taW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPSBzZWNvbmRzOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBB
U1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5n
VGltZSA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1f
cGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWUgPSBzZWNvbmRzOwotICAgIHVwZGF0ZUNhY2hl
TWF4QWdlQ2FwKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Ojp1cGRhdGVDYWNoZU1heEFnZUNhcCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYo
bV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lXSAoKSB7
Ci0gICAgICAgIHN0b3JlLT5zZXRDYWNoZU1heEFnZUNhcChzZWNvbmRzLCBbXSB7IH0pOwotICAg
IH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdl
Q2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0gICAgCi0g
ICAgbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSA9IHNlY29uZHM7Ci0g
ICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9
IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXBUaW1lXSAoKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHN0
b3JlLT5uZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKHNlY29uZHMp
OwotICAgIH0pOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2lu
Z2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFtX2FjdGl2ZVBsdWdp
blRva2Vucy5jb250YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuICFtX2xhc3RUaW1l
RGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+PSAobV9sYXN0
VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFsdWUpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2RhdGFSZWNvcmRzQmVpbmdS
ZW1vdmVkID0gdmFsdWU7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0gICAg
ICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gTW9ub3RvbmljVGltZTo6bm93
KCk7Ci19Ci0KIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKQEAgLTEwNTYsMzkgKzcyNCw2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
CiAgICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZU9yaWdpbnMu
Y29udGFpbnMoZmlyc3RQYXJ0eURvbWFpbi5zdHJpbmcoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRl
YnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFZlY3RvcjxS
ZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCi17Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1l
bnQgPSA1MDsKLSAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChkb21haW5zLnNpemUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRl
bWVudCkgewotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0
cyBmb3I6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucykudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBiYXRjaDsKLSAgICBiYXRjaC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KTsKLSAgICBhdXRvIGJhdGNoTnVt
YmVyID0gMTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkJhdGNoZXMgPSBzdGQ6OmNlaWwoZG9tYWlu
cy5zaXplKCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4obWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dT
dGF0ZW1lbnQpKTsKLQotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAg
ICBpZiAoYmF0Y2guc2l6ZSgpID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50
KSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0
cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1i
ZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICAgICAgICAgIGJhdGNoLnNocmluaygwKTsKLSAgICAgICAgICAgICsrYmF0Y2hOdW1i
ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7Ci0gICAgfQotICAg
IGlmICghYmF0Y2guaXNFbXB0eSgpKQotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGly
ZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFj
dGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNo
KS51dGY4KCkuZGF0YSgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7Ci0gICAg
VU5VU0VEX1BBUkFNKGRvbWFpbnMpOwotI2VuZGlmCi19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC0xMTIxLDM1ICs3NTYsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dgog
ICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBk
YXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1Rv
QmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3Rv
cmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRv
bWFpbnNUb0Jsb2NrLCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBz
dG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyQmxvY2tp
bmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
cywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3Jl
KSwgZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zKV0gewotICAgICAgICBzdG9yZS0+
Y2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGRvbWFpbnMpOwotICAgIH0pOwotCi0gICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKSBjb25zdAogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTE5Niw1MiArODAyLDYgQEAgVmVjdG9yPFJlZ2lzdHJh
YmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdHJhYmxl
RG9tYWluc1QKICAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOwogfQogCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRl
SWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
YXV0byB0b2RheSA9IE9wZXJhdGluZ0RhdGU6OnRvZGF5KCk7Ci0gICAgaWYgKCFtX29wZXJhdGlu
Z0RhdGVzLmlzRW1wdHkoKSAmJiB0b2RheSA8PSBtX29wZXJhdGluZ0RhdGVzLmxhc3QoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9w
ZXJhdGluZ0RhdGVzV2luZG93KQotICAgICAgICBtX29wZXJhdGluZ0RhdGVzLnJlbW92ZSgwKTsK
LQotICAgIG1fb3BlcmF0aW5nRGF0ZXMuYXBwZW5kKHRvZGF5KTsKLX0KLQotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSBjb25zdAotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6
ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KSB7Ci0gICAgICAgIGlmIChPcGVyYXRpbmdEYXRl
Ojpmcm9tV2FsbFRpbWUocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blRpbWUpIDwgbV9vcGVyYXRpbmdEYXRlcy5maXJzdCgpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZG9uJ3QgbWVldCB0aGUgcmVhbCBjcml0ZXJpYSBm
b3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRoZSB1c2VyIHNldHRpbmcgZm9yIGEgdGln
aHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0aW5nKS4KLSAgICBpZiAobV9wYXJhbWV0
ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKLSAgICAgICAgaWYgKFdhbGxUaW1lOjpu
b3coKSA+IHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsg
bV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVz
KHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIG1fcGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1F
bnRyeUNvdW50OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KQotewotICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmll
c0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMjY0LDIyICs4MjQsNiBAQCB2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAg
IEFTU0VSVCghbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGFyYW1ldGVy
cyA9IHsgfTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omxv
Z1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1h
a2VSZWYobV9zdG9yZSksIGV2ZW50ID0gZXZlbnQuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAg
c3RvcmUtPmxvZ1Rlc3RpbmdFdmVudChldmVudCk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgZG9tYWluLCBTZWNvbmRzIHNlY29uZHMpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CkBAIC0xMzA0LDI3ICs4NDgsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YgogICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0
b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW3N0b3JlID0g
c3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgp
LmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICB1cGRhdGVDb29raWVCbG9ja2luZyhb
XSgpIHsgfSk7Ci0gICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLSAgICB1cGRhdGVDbGllbnRT
aWRlQ29va2llc0FnZUNhcCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKaW5k
ZXggNmIxYjExMzM3NTcyZjhkMzIxYWQwZmQ5ZDBiYWEzYzNkOWQ2OWE5My4uYTdjZjJmMzQxZTJi
NDRkODM2MDU2NDY1ZjMxMGFkYjNmMThlYTNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE3ICsyNywxMyBAQAogCiAjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKIAotI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAj
aW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgog
Ci0jaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0NsYXNzaWZpZXJDb2NvYS5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEtleWVkRGVjb2RlcjsKIGNsYXNzIEtleWVkRW5jb2RlcjsKQEAgLTQ2LDM1ICs0MiwxOSBA
QCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWNsYXNzIE9wZXJhdGluZ0RhdGU7CiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2U7CiAKIC8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRl
c3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGlj
cyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSA6IHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+IHsKK2Ns
YXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSA6IHB1YmxpYyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUgewogcHVibGljOgotICAgIHVzaW5nIFJlc291cmNlTG9hZFN0YXRp
c3RpY3MgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgIHVzaW5nIFJlZ2lz
dHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgVG9w
RnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBTdWJG
cmFtZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFN1YlJl
c291cmNlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVk
aXJlY3REb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRp
cmVjdGVkRnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5n
IFJlZGlyZWN0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVz
aW5nIE5hdmlnYXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAg
ICB1c2luZyBOYXZpZ2F0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwot
ICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOwotICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOwotICAgIHVzaW5nIE9wZW5lclBhZ2VJRCA9IHVpbnQ2NF90OwotICAgIHVzaW5nIFBh
Z2VJRCA9IHVpbnQ2NF90OwotICAgIHVzaW5nIEZyYW1lSUQgPSB1aW50NjRfdDsKLQogICAgIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmLCBXb3JrUXVldWUmKTsKLSAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlKCk7CiAKICAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZSYpOwogCi0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b3VyY2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgY2xlYXIoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIGNvbnN0IEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXA7IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVu
Y29kZXI+IGNyZWF0ZUVuY29kZXJGcm9tRGF0YSgpIGNvbnN0OwogICAgIHZvaWQgbWVyZ2VXaXRo
RGF0YUZyb21EZWNvZGVyKFdlYkNvcmU6OktleWVkRGVjb2RlciYpOwpAQCAtODIsMTQ1ICs2Miw3
MyBAQCBwdWJsaWM6CiAgICAgdm9pZCBtZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M+JiYpOwogICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rp
b248dm9pZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JikgY29uc3Q7CiAKLSAgICB2
b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0g
ICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBj
bGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBpbmNsdWRlVG9k
YXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3Rp
Y3NBbmREYXRhUmVjb3JkcygpOwotCi0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVy
T3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5l
ckRvbWFpbiYmKTsKLSAgICB2b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQg
Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworICAgIHZvaWQgY2xh
c3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdl
SWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKSBv
dmVycmlkZTsKIAotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdDsKLSAgICBi
b29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9E
b21haW4mKSBjb25zdDsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIo
RG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWlu
JiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7Ci0gICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgZ3JhbmRmYXRoZXJEYXRh
Rm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9v
bCB2YWx1ZSk7Ci0gICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mKSBjb25zdDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25z
dCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVE
b21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwg
Y29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0
IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOwot
ICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNl
RG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJl
Y3REb21haW4mKTsKLSAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBU
b3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0gICAgdm9pZCBzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGly
ZWN0RG9tYWluJik7CisgICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgYm9vbCB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0
TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KTsKLSAgICB2b2lk
IHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCk7Ci0gICAgdm9p
ZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAgICB2b2lkIHNldFN1YmZyYW1l
VW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1l
RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92
ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1
YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2
b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0
RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0OworICAgIHZv
aWQgY2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7Ci0gICAg
dm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChi
b29sKTsKLSAgICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sKTsKLSAgICB2b2lk
IHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRH
cmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKGJvb2wpOwotICAgIGJvb2wgaXNEZWJ1Z01vZGVFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9OwotICAgIHZvaWQgc2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lk
IGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURv
bWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJh
bWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHByb21w
dEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYp
IG92ZXJyaWRlOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYs
IFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWRO
b3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmKTsKLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWlu
JiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVk
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAgICB2
b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYm
LCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBO
YXZpZ2F0ZWRUb0RvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVk
RnJvbURvbWFpbiYsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3ZlcnJpZGU7
CisgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92ZXJyaWRl
OworICAgIHZvaWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURv
bWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBs
b2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJv
b2wgaXNNYWluRnJhbWUpOwotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZy
YW1lRG9tYWluJik7Ci0gICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVz
b3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKTsK
LSAgICB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21h
aW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKTsKKyAgICB2b2lkIGNsZWFyVXNlckludGVy
YWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNI
YWRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKIAot
ICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsK
LSAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYp
OwotCi0gICAgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNlY29u
ZHMpOwotCi0gICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgY29uc3Qg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RvcmU7IH0KKyAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
U2Vjb25kcykgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxv
Y2tBbmRLZWVwQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgc3Rh
dGljIGJvb2wgc2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYpOwogICAgIHN0YXRpYyBib29sIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Ro
cm91Z2hQcm9tcHQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJik7CiAgICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rp
b24oUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwotICAgIGJvb2wgaGFzU3RhdGlzdGlj
c0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwogICAgIGJvb2wg
d2FzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiBjdXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1
cGRhdGVkKSBjb25zdDsKKyAgICB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JE
b21haW5zKEhhc2hTZXQ8U3RyaW5nPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFByZXZhbGVu
dFJlc291cmNlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
KTsKICAgICB1bnNpZ25lZCByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0
ZWRUb1RoaXNEb21haW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIEhhc2hTZXQ8UmVk
aXJlY3RlZFRvRG9tYWluPiYsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpIGNvbnN0
OwotICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKGJvb2wgZW5hYmxlZCkg
eyBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCAgPSBlbmFibGVkOyB9Ci0gICAgYm9vbCBz
aG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVidWdMb2dnZ2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVidWdMb2dnaW5nRW5hYmxlZCAgPSBlbmFibGVk
OyB9Ci0gICAgdm9pZCBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sKTsKLSAgICB2b2lk
IHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKICAgICB2
b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1l
RG9tYWluJiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVk
Tm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lk
IG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KFJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKTsKICAgICBib29sIGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyYpOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJl
dmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0g
ICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21h
aW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwotICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAo
U2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHZvaWQgc2V0
QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDbGll
bnRTaWRlQ29va2llc0FnZUNhcCgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCBy
ZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7Ci0jZW5kaWYKKyAgICBWZWN0b3I8UmVnaXN0
cmFibGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKSBv
dmVycmlkZTsKIAotICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKLSAgICAgICAgc2l6ZV90IHBydW5l
RW50cmllc0Rvd25UbyB7IDgwMCB9OwotICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJp
ZXMgeyAxMDAwIH07Ci0gICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb247Ci0gICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsIHsgMV9oIH07Ci0gICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRf
aCAqIDcgfTsKLSAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9
OwotICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3
IH07Ci0gICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZv
cmVEYXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkU3VibWl0
VGVsZW1ldHJ5IHsgdHJ1ZSB9OwotICAgIH07Ci0KLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmIG1fc3RvcmU7Ci0gICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAgICAg
V2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lz
dGVudFN0b3JhZ2U7CiAgICAgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFpbiwgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7Ci0jaWYgSEFWRShDT1JFX1BSRURJ
Q1RJT04pCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSBtX3Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOwotI2Vsc2UKLSAgICBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllciBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOwotI2Vu
ZGlmCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgSGFzaFNldDx1aW50NjRf
dD4gbV9hY3RpdmVQbHVnaW5Ub2tlbnM7Ci0jZW5kaWYKLSAgICBQYXJhbWV0ZXJzIG1fcGFyYW1l
dGVyczsKLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsKLSAgICBX
YWxsVGltZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7Ci0gICAgYm9vbCBtX2RlYnVn
TG9nZ2luZ0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsg
ZmFsc2UgfTsKLSAgICBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGljUHJldmFs
ZW50UmVzb3VyY2UgeyAiM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyJfcyB9OwotICAgIFJlZ2lzdHJh
YmxlRG9tYWluIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIG1fc3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGF0YVJlY29y
ZHNCZWluZ1JlbW92ZWQgeyBmYWxzZSB9OwotICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQ7Ci0KLSAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJv
Y2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHsgMCB9OwotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBt
X3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRhODQwYTZjNmNhZDc5ZDgxNzQ0YTEyZjJiMjI0ZTBiMmUyZjBk
MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAtMCwwICsxLDU3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaCIKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgorI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NQ
cm94eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKKyNpbmNsdWRlICJXZWJQcm9j
ZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5
LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvS2V5
ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPHd0
Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworY29u
c3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3Mg
fTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07CisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK3N0YXRpYyBTdHJpbmcgZG9tYWluc1RvU3RyaW5nKGNv
bnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAg
ICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW4uc3RyaW5nKCkpOworICAg
IH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorI2VuZGlmCisKK09wZXJhdGlu
Z0RhdGUgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lIHRpbWUpCit7CisgICAg
ZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOworICAg
IGludCB5ZWFyID0gbXNUb1llYXIobXMpOworICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1z
LCB5ZWFyKTsKKyAgICBpbnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7CisgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5Nb250aEZyb21EYXlJblll
YXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7CisKKyAgICByZXR1cm4gT3BlcmF0aW5nRGF0
ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OworfQorCitPcGVyYXRpbmdEYXRlIE9wZXJhdGlu
Z0RhdGU6OnRvZGF5KCkKK3sKKyAgICByZXR1cm4gT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1l
KFdhbGxUaW1lOjpub3coKSk7Cit9CisKK1NlY29uZHMgT3BlcmF0aW5nRGF0ZTo6c2Vjb25kc1Np
bmNlRXBvY2goKSBjb25zdAoreworICAgIHJldHVybiBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20x
OTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBzZWNvbmRzUGVyRGF5IH07Cit9CisK
K2Jvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5ICYm
IG1fbW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOworfQor
Citib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPChjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhl
cikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8IG90aGVyLnNlY29u
ZHNTaW5jZUVwb2NoKCk7Cit9CisKK2Jvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PShjb25z
dCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Vjb25kc1NpbmNl
RXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOworfQorCitSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKKyAgICA6IG1f
c3RvcmUoc3RvcmUpCisgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJ
Zk5lY2Vzc2FyeSgpOworfQorCitSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNvbXB1dGVJbXBv
cnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKQor
eworICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Om1heEltcG9ydGFuY2U7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJl
c291cmNlKQorICAgICAgICBpbXBvcnRhbmNlIC09IDE7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRp
c3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIGltcG9ydGFuY2UgLT0gMjsKKyAgICBy
ZXR1cm4gaW1wb3J0YW5jZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxk
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IHZhbHVlOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNC
ZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNC
ZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcGFyYW1ldGVycy5zaG91bGRT
dWJtaXRUZWxlbWV0cnkgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxs
YmFjaykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghc2hv
dWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgbV9h
Y3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6
IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkKKyAg
ICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuYWRkKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2Vu
KCkpOworI2VuZGlmCisKKyAgICBhdXRvIHByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IHJlZ2lz
dHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAgICBpZiAocHJldmFsZW50
UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBjYWxsYmFjaygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgUkVMRUFT
RV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkFib3V0IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9yICV7cHVibGljfXMuIiwg
ZG9tYWluc1RvU3RyaW5nKHByZXZhbGVudFJlc291cmNlRG9tYWlucykudXRmOCgpLmRhdGEoKSk7
CisjZW5kaWYKKworICAgIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKHRydWUpOworCisgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjcm9z
c1RocmVhZENvcHkocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHNob3VsZE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUu
Y29weVJlZigpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAg
ICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIHdlYWtUaGlzLT5tX3N0b3JlLmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21h
aW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlu
cyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3Jr
UXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXShjb25zdCBIYXNoU2V0PFN0cmluZz4mIGRvbWFp
bnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1
ZS0+ZGlzcGF0Y2goW2RvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRD
b3B5KGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
aygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHdlYWtUaGlzLT5pbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9t
YWlucyhXVEZNb3ZlKGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSk7CisgICAgICAgICAg
ICAgICAgd2Vha1RoaXMtPnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFjaygpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5h
YmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJl
Y29yZHMuIik7CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCkKKyAgICAgICAgY2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICAK
KyAgICByZW1vdmVEYXRhUmVjb3JkcyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyldICgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcnVu
ZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgICAgICBzeW5jU3RvcmFnZUlmTmVlZGVkKCk7CisK
KyAgICAgICAgaWYgKCFtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldIHsKKyAg
ICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgICAgICBpZiAoIXdl
YWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbV9zdG9yZS5u
b3RpZnlSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc2VkKCk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJF
eGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpLCBzdG9yZSA9IG1ha2VSZWYo
bV9zdG9yZSldICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+cmVnaXN0cmFibGVEb21haW5z
V2l0aFdlYnNpdGVEYXRhKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVk
RGF0YVR5cGVzKCksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQs
IFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXSAoSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mJiBkb21haW5zV2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGRvbWFp
bnNXaXRoV2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhXZWJzaXRlRGF0
YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldICgpIG11dGFibGUgeworICAgICAgICAg
ICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5ncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGRvbWFpbnNXaXRo
V2Vic2l0ZURhdGEpOworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJhbWV0ZXJz
LmdyYW5kZmF0aGVyaW5nVGltZTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c3luY1N0b3Jh
Z2VJbW1lZGlhdGVseSgpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgd2Vha1RoaXMtPmxvZ1Rlc3RpbmdFdmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wg
ZW5hYmxlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5G
TyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJUdXJuZWQgSVRQIERlYnVnIE1vZGUgb24u
Iik7CisjZW5kaWYKKworICAgIG1fZGVidWdNb2RlRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX2Rl
YnVnTG9nZ2luZ0VuYWJsZWQgPSBlbmFibGU7CisKKyAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJj
ZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICAvLyBUaGlzIHdpbGwgbG9nIHRoZSBjdXJyZW50IGNvb2tp
ZSBibG9ja2luZyBzdGF0ZS4KKyAgICBpZiAoZW5hYmxlKQorICAgICAgICB1cGRhdGVDb29raWVC
bG9ja2luZyhbXSgpIHsgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKQoreworICAgIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFp
bjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlz
dGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWRlbnRpZmllciA9ICsrbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmll
cjsKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nl
c3NpbmdJbnRlcnZhbCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQ
cm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXJdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5n
UmVxdWVzdElkZW50aWZpZXIgIT0gc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmll
cikgeworICAgICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlQ29va2llQmxvY2tp
bmcoW10oKSB7IH0pOworICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQ
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElkZW50aWZpZXIgPSBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+
PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPSBz
ZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwor
CisgICAgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9
IHNlY29uZHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRl
cnMuZ3JhbmRmYXRoZXJpbmdUaW1lID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3Mp
OworCisgICAgbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAg
dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICAKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFr
ZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVd
ICgpIHsKKyAgICAgICAgc3RvcmUtPnNldENhY2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VD
YXBGb3JDbGllbnRTaWRlQ29va2llcyhTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKyAgICAKKyAg
ICBtX3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAg
ICB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNh
cFRpbWVdICgpIHsKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5l
dHdvcmtTZXNzaW9uKCkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkuc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7CisgICAg
fSk7CisjZW5kaWYKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3Vs
ZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVn
aW5Qcm9jZXNzZXMoKSkgeworICAgICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRh
aW5zKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dl
cmVSZW1vdmVkIHx8IE1vbm90b25pY1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29y
ZHNXZXJlUmVtb3ZlZCArIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0
YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAg
ICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFS
ZWNvcmRzV2VyZVJlbW92ZWQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhj
b25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3Rv
cmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShk
b21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0
b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorICAgIAorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jvc3NUaHJlYWRD
b3B5KGRvbWFpbnMpXSB7CisgICAgICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIo
ZG9tYWlucyk7CisgICAgfSk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVu
Y3Rpb248dm9pZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JiBwcm9jZXNzRnVuY3Rp
b24pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBmb3Ig
KGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVz
KCkpCisgICAgICAgIHByb2Nlc3NGdW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7Cit9CisKK09w
dGlvbmFsPFNlY29uZHM+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0Vw
aXJhdGlvblRpbWUoKSBjb25zdAoreworICAgIGlmIChtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2lu
Y2VFcG9jaCgpIC0gbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUo
KTsKKyAgICAKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0
ZXNXaW5kb3cpCisgICAgICAgIHJldHVybiBtX29wZXJhdGluZ0RhdGVzLmZpcnN0KCkuc2Vjb25k
c1NpbmNlRXBvY2goKTsKKyAgICAKKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitWZWN0
b3I8T3BlcmF0aW5nRGF0ZT4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZU9wZXJh
dGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVj
dG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpCit7CisgICAgaWYgKGV4aXN0aW5nRGF0ZXMu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGTW92ZShuZXdEYXRlcyk7CisgICAgCisgICAg
VmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1lcmdlZERhdGVzKGV4aXN0aW5nRGF0ZXMuc2l6ZSgpICsg
bmV3RGF0ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0
b3JzIG9mIGRhdGVzLgorICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBleGlz
dGluZ0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2Vk
RGF0ZXMuYmVnaW4oKSk7CisgICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KKyAgICByZW1v
dmVSZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKKyAgICAKKyAgICAvLyBEcm9wIG9sZCBk
YXRlcyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hlcyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4K
KyAgICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisg
ICAgICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKKyAgICAKKyAgICByZXR1cm4gbWVyZ2VkRGF0
ZXM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbmNsdWRlVG9kYXlB
c09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBhdXRvIHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKKyAgICBp
ZiAoIW1fb3BlcmF0aW5nRGF0ZXMuaXNFbXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0
ZXMubGFzdCgpKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRl
cy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIG1fb3BlcmF0aW5nRGF0
ZXMucmVtb3ZlKDApOworCisgICAgbV9vcGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOworfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQo
V2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMu
c2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KSB7CisgICAgICAgIGlmIChPcGVyYXRpbmdE
YXRlOjpmcm9tV2FsbFRpbWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgbV9vcGVy
YXRpbmdEYXRlcy5maXJzdCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIC8vIElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGly
ZWQgc3RhdGlzdGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJp
Y3Rpb24gKG1haW5seSBmb3IgdGVzdGluZykuCisgICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKSB7CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBtb3N0
UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uLnZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVz
b3VyY2VTdGF0aXN0aWMpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1N0YXRpc3RpY3NFeHBpcmVk
KHJlc291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVz
KHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIG1fcGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1F
bnRyeUNvdW50OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1
bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25U
byA9IHBydW5lVGFyZ2V0Q291bnQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wYXJhbWV0ZXJzID0geyB9OworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYg
ZXZlbnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBSdW5Mb29w
OjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZXZlbnQgPSBldmVu
dC5pc29sYXRlZENvcHkoKV0geworICAgICAgICBzdG9yZS0+bG9nVGVzdGluZ0V2ZW50KGV2ZW50
KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92
ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFJ1bkxvb3A6
Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBz
dG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRp
ZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICB1cGRhdGVDYWNo
ZU1heEFnZUNhcCgpOworICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNo
ZXMoY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zKQoreworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXRpYyBjb25zdCBh
dXRvIG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50ID0gNTA7CisgICAgaWYgKGRv
bWFpbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGRvbWFpbnMu
c2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8g
JXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9
cy4iLCBhY3Rpb24sIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IGJhdGNoOworICAgIGJhdGNoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpOworICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOworICAgIHVu
c2lnbmVkIG51bWJlck9mQmF0Y2hlcyA9IHN0ZDo6Y2VpbChkb21haW5zLnNpemUoKSAvIHN0YXRp
Y19jYXN0PGZsb2F0PihtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkpOworICAg
IAorICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBpZiAoYmF0Y2gu
c2l6ZSgpID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAg
ICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVi
bGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9m
QmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAg
ICAgIGJhdGNoLnNocmluaygwKTsKKyAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7CisgICAgICAg
IH0KKyAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7CisgICAgfQorICAgIGlmICghYmF0Y2gu
aXNFbXB0eSgpKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250
ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hO
dW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0
YSgpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7CisgICAgVU5VU0VEX1BBUkFN
KGRvbWFpbnMpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDIw
YmM1MjA0ZjVhOWVjNjBiMzAyYTlmYzY2MmJmNmVmZGI3OTBjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgS2V5ZWREZWNvZGVyOworY2xhc3MgS2V5ZWRFbmNv
ZGVyOworc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CisK
K2NsYXNzIE9wZXJhdGluZ0RhdGUgeworcHVibGljOgorICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRl
ZmF1bHQ7CisgICAgCisgICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgZnJvbVdhbGxUaW1lKFdhbGxU
aW1lKTsKKyAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSB0b2RheSgpOworICAgIFNlY29uZHMgc2Vj
b25kc1NpbmNlRXBvY2goKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0
aW5nRGF0ZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGlu
Z0RhdGUmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5n
RGF0ZSYgb3RoZXIpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBPcGVyYXRpbmdEYXRlKGlu
dCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkKKyAgICAgICAgOiBtX3llYXIoeWVhcikK
KyAgICAgICAgLCBtX21vbnRoKG1vbnRoKQorICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkp
CisgICAgeyB9CisKKyAgICBpbnQgbV95ZWFyIHsgMCB9OworICAgIGludCBtX21vbnRoIHsgMCB9
OyAvLyBbMCwgMTFdLgorICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgorfTsK
KworLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRo
ZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xh
c3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4geworcHVibGljOgorICAgIHVzaW5nIFJlc291cmNl
TG9hZFN0YXRpc3RpY3MgPSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworICAgIHVz
aW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAg
dXNpbmcgVG9wRnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1
c2luZyBTdWJGcmFtZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVz
aW5nIFN1YlJlc291cmNlRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAg
dXNpbmcgUmVkaXJlY3REb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1
c2luZyBSZWRpcmVjdGVkRnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwor
ICAgIHVzaW5nIFJlZGlyZWN0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OworICAgIHVzaW5nIE5hdmlnYXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbjsKKyAgICB1c2luZyBOYXZpZ2F0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluOworICAgIHVzaW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJl
Z2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE9wZW5lclBhZ2VJRCA9IHVpbnQ2NF90OworICAg
IHVzaW5nIFBhZ2VJRCA9IHVpbnQ2NF90OworICAgIHVzaW5nIEZyYW1lSUQgPSB1aW50NjRfdDsK
KyAgICAKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlJiwgV29ya1F1ZXVlJik7CisgICAgdmlydHVhbCB+UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7
CisKKyAgICBjb25zdCBIYXNoTWFwPFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcz4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsgfQor
CisgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKKworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0g
MDsKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIGNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKKworICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnko
KTsKKyAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1N0
b3JhZ2VJbW1lZGlhdGVseSgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0U3RvcmFn
ZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQ
YWdlSUQsIE9wZW5lckRvbWFpbiYmKSA9IDA7CisgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNj
ZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGdyYW5kZmF0aGVy
RXhpc3RpbmdXZWJzaXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgdmly
dHVhbCBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFy
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisgICAgdmly
dHVhbCBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mLCBib29sIHZhbHVlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzR3JhbmRm
YXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBpbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFN0
cmluZz4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBncmFuZGZhdGhlckRhdGFGb3JEb21haW5z
KGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihjb25zdCBTdWJGcmFtZURvbWFpbiYs
IGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21h
aW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RG
cm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BG
cmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNv
bnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworCisgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29u
c3QgU3RyaW5nJik7CisKKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBt
YXhpbXVtRW50cnlDb3VudCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90
IHBydW5lVGFyZ2V0Q291bnQpOworICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFs
dWVzKCk7CisgICAgT3B0aW9uYWw8U2Vjb25kcz4gc3RhdGlzdGljc0VwaXJhdGlvblRpbWUoKSBj
b25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBj
b25zdCA9IDA7CisKKyAgICB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbChib29sKTsKKyAgICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRy
eShib29sKTsKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7
CisgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25k
cyk7CisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CisgICAgdm9pZCBz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOworICAgIGJvb2wgaXNEZWJ1
Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9OworICAg
IHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFn
ZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWlu
JiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdy
YW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFt
ZUlELCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9u
KGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBO
YXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURv
bWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBXYWxsVGltZSBsYXN0
U2VlbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0
IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFzdFNl
ZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHByaW1hcnlEb21haW4sIFNlY29uZHMpID0gMDsK
KworICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKworICAgIGNvbnN0IFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3N0b3Jl
OyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFuY2UgeyAzIH07
CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHN0YXRpYyBWZWN0b3I8
T3BlcmF0aW5nRGF0ZT4gbWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBWZWN0b3I8T3BlcmF0aW5n
RGF0ZT4mIGV4aXN0aW5nRGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKTsK
KyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0
aW9uLCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKTsKKyAgICBib29s
IGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25z
dDsKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKFdhbGxUaW1lIG1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lKSBjb25zdDsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICB2b2lkIHJl
Z2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyNlbmRpZgorICAgIHZvaWQgc2NoZWR1bGVT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOworICAgIHZpcnR1YWwgVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01v
ZGUoKSA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJh
YmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkgPSAwOworCitwcml2YXRlOgorICAgIHZvaWQgc2V0
U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3N0b3JhZ2VBY2Nl
c3NQcm9tcHRzRW5hYmxlZCAgPSBlbmFibGVkOyB9CisgICAgYm9vbCBzaG91bGRSZW1vdmVEYXRh
UmVjb3JkcygpIGNvbnN0OworICAgIHZvaWQgc2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoYm9vbCBl
bmFibGVkKSB7IG1fZGVidWdMb2dnaW5nRW5hYmxlZCAgPSBlbmFibGVkOyB9CisgICAgdm9pZCBz
ZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sKTsKKyAgICB2b2lkIHJlbW92ZURhdGFSZWNv
cmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRDYWNoZU1heEFn
ZUNhcChTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdm9p
ZCBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0
ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7CisKKyAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7Cisg
ICAgICAgIHNpemVfdCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKKyAgICAgICAgc2l6ZV90
IG1heFN0YXRpc3RpY3NFbnRyaWVzIHsgMTAwMCB9OworICAgICAgICBPcHRpb25hbDxTZWNvbmRz
PiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uOworICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFfaCB9OworICAgICAgICBTZWNvbmRzIGdyYW5k
ZmF0aGVyaW5nVGltZSB7IDI0X2ggKiA3IH07CisgICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VD
YXBUaW1lIHsgMjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0Fn
ZUNhcFRpbWUgeyAyNF9oICogNyB9OworICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIHNob3VsZENs
YXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OworICAgICAg
ICBib29sIHNob3VsZFN1Ym1pdFRlbGVtZXRyeSB7IHRydWUgfTsKKyAgICB9OworCitwcm90ZWN0
ZWQ6CisgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBtX3N0b3JlOworICAgIFJl
ZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVlOworICAgIEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKKyNpZiBIQVZF
KENPUkVfUFJFRElDVElPTikKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNv
Y29hIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7CisjZWxzZQorICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXI7CisjZW5kaWYKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBIYXNo
U2V0PHVpbnQ2NF90PiBtX2FjdGl2ZVBsdWdpblRva2VuczsKKyNlbmRpZgorICAgIFBhcmFtZXRl
cnMgbV9wYXJhbWV0ZXJzOworICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtX29wZXJhdGluZ0Rh
dGVzOworICAgIFdhbGxUaW1lIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKKyAgICBi
b29sIG1fZGVidWdMb2dnaW5nRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RlYnVnTW9k
ZUVuYWJsZWQgeyBmYWxzZSB9OworICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1fZGVidWdNYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZTsKKyAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVk
IHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgeyBmYWxzZSB9
OworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQ7CisK
KyAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVy
IHsgMCB9OworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vz
c2luZ1JlcXVlc3RJZGVudGlmaWVyOworCisgICAgY29uc3QgUmVnaXN0cmFibGVEb21haW4gbV9k
ZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIHsgIjNyZHBhcnR5dGVzdHdlYmtpdC5vcmciX3Mg
fTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVD
YWxsc0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZUNvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhODI4ZWZjZDZhM2FhZjVhYTMzYjRiNmM0MzM2YjIxY2Zi
Y2NmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0KQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NU
QVRJU1RJQ1MpCisKKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyVXNl
ckRlZmF1bHRzSWZOZWVkZWQoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3QgaW5pdE9u
Y2U7CisKKyAgICBkaXNwYXRjaF9vbmNlKCZpbml0T25jZSwgXnsKKyAgICAgICAgU2Vjb25kcyB0
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uIl0pOworICAgICAgICBpZiAodGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA+
IDBfcyAmJiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uIDw9IDI0X2ggKiAzMCkKKyAgICAgICAg
ICAgIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24odGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bik7CisKKyAgICAgICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bCJdKTsKKyAgICAgICAgaWYgKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA+
IDBfcyAmJiBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPCAxX2gpCisgICAg
ICAgICAgICBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKKworICAgICAgICBTZWNvbmRzIGdyYW5kZmF0
aGVyaW5nVGltZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVG
b3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIl0pOworICAg
ICAgICBpZiAoZ3JhbmRmYXRoZXJpbmdUaW1lID4gMF9zICYmIGdyYW5kZmF0aGVyaW5nVGltZSA8
PSAyNF9oICogNykKKyAgICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5nVGltZShncmFuZGZhdGhl
cmluZ1RpbWUpOworCisgICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkl0cERl
YnVnTW9kZSJdKTsKKyAgICAgICAgYXV0byogZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9
IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJdOworICAgICAgICBp
ZiAoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlRm9yRGVidWdNb2RlKFJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UpKTsKKworICAgICAgICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJs
ZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCJdKTsKKyAgICAg
ICAgaWYgKGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzID4gMF9zICYmIGNhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzIDw9IDI0X2ggKiAzNjUpCisgICAgICAgICAg
ICBzZXRDYWNoZU1heEFnZUNhcChjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk7
CisgICAgICAgIAorICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGllbnRTaWRlQ29va2llc0FnZUNhcCJdKTsKKyAgICAgICAgaWYgKGNs
aWVudFNpZGVDb29raWVzQWdlQ2FwID4gMF9zICYmIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwIDw9
IDI0X2ggKiAzNjUpCisgICAgICAgICAgICBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhj
bGllbnRTaWRlQ29va2llc0FnZUNhcCk7CisgICAgfSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IGFkYmRh
ZDIzOThmYjhlMDc3Y2E0MTc5N2E3OWZlZGMwNDA1MThkMzkuLjE5MGQxNjQ5OTNkYTNmMzg2MGY0
MGQwMTNlNjQ4MjYwZDgxNWQyNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24u
aCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIgogI2luY2x1ZGUgIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oIgogI2luY2x1ZGUgIlNob3Vs
ZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgpAQCAtNDgsNiArNDksOSBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3Jr
U3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVT
dGF0ZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CkBAIC04Niw3ICs5MCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAg
ICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKHZhbHVlKTsKICAgICB9KTsKIH0KQEAgLTk2LDkgKzEwMiwxMSBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChibwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAg
cG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAg
ICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+
c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CisgICAgICAg
IGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKLSAgICAgICAgCisK
ICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
fSk7CiB9CkBAIC0xMDgsNyArMTE2LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHMKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9y
ZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJj
ZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOworICAgICAgICBlbHNlIGlmIChtX21l
bW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwodmFsdWUpOwogCiAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwpAQCAtMTIwLDcgKzEzMCw5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxl
bWV0cnkoYm9vbCB2YWx1ZSkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAg
cG9zdFRhc2soW3RoaXMsIHZhbHVlXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAg
ICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5z
ZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOworICAgICAgICBlbHNlIGlmIChtX21lbW9y
eVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U2hvdWxkU3VibWl0VGVsZW1l
dHJ5KHZhbHVlKTsKICAgICB9KTsKIH0KQEAgLTE0MywxMSArMTU1LDE1IEBAIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKE5ldHdv
cmtTZXNzaW9uJiBuCiAgICAgcG9zdFRhc2soW3RoaXMsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NE
aXJlY3RvcnkgPSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5Lmlzb2xhdGVkQ29weSgp
XSB7CiAgICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlKTsKICAgICAg
ICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1vcnlTdG9yZSwgbV9zdGF0aXN0aWNzUXVl
dWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOworICAgICAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5pdHBEYXRhYmFzZU1vZGVFbmFibGVk
KCkpIHsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1
ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSk7CisgICAgICAgICAgICBtX2RhdGFi
YXNlU3RvcmUtPnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKCptX21lbW9yeVN0b3JlKTsKKyAgICAg
ICAgfQogCiAgICAgICAgIC8vIEZJWE1FKDE5MzI5Nyk6IFRoaXMgc2hvdWxkIGJlIHJldmlzZWQg
YWZ0ZXIgdGhlIFVJUHJvY2VzcyB2ZXJzaW9uIGdvZXMgYXdheS4KICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB9KTsKLSAgICAKKwogICAgIG1f
ZGFpbHlUYXNrc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwogfQogCkBAIC0xODcsNiArMjAz
LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVzdHJv
eVBlcnNpc3RlbnRTdG9yZSgpCiAgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFsmc2Vt
YXBob3JlLCB0aGlzXSB7CiAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBudWxscHRyOwog
ICAgICAgICBtX21lbW9yeVN0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgbV9kYXRhYmFzZVN0b3Jl
ID0gbnVsbHB0cjsKICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgpOwogICAgIH0pOwogICAgIHNl
bWFwaG9yZS53YWl0KCk7CkBAIC0xOTcsNyArMjE0LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2
YWwKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMs
IHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0
YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZSh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3Rv
cmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlKHZhbHVlKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC0yMDgsNyArMjI3LDkgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNv
bnN0IFJlZ2kKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RU
YXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAg
ICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShkb21h
aW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1v
cnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoZG9tYWluKTsKICAgICAg
ICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBA
IC0yMTksNyArMjQwLDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNj
aGVkdWxlU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBp
ZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAg
ICAgIG1fZGF0YWJhc2VTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwor
ICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTI1OCwxNyArMjgx
LDI2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNj
ZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9t
YWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xh
dGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9y
ZSkgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUgJiYgIW1fZGF0YWJhc2VTdG9yZSkgewog
ICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBtX21lbW9yeVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNTdG9yYWdlQWNjZXNzKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFzU3RvcmFnZUFjY2Vzcyk7CisK
KyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkgeworICAgICAgICAgICAgbV9kYXRhYmFzZVN0
b3JlLT5oYXNTdG9yYWdlQWNjZXNzKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJh
bWVJRCwgcGFnZUlELCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oYm9vbCBoYXNTdG9yYWdlQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBw
b3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBoYXNTdG9yYWdlQWNjZXNzXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihoYXNTdG9yYWdlQWNjZXNzKTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX21lbW9y
eVN0b3JlKSB7CisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzKHN1
YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNTdG9yYWdlQWNj
ZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBoYXNTdG9yYWdlQWNjZXNzXSgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYXNTdG9y
YWdlQWNjZXNzKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICB9CiAgICAgfSk7CiB9CiAKQEAgLTMyNSwxOCArMzU3LDI2IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJs
ZURvbWFpCiAgICAgfQogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3Vi
RnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21h
aW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSAm
JiAhbV9kYXRhYmFzZVN0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5v
dFJlcXVlc3RBY2Nlc3MpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhX
VEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQu
dmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3RvcmFnZUFjY2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFi
bGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhdHVzXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgIGlmIChtX2RhdGFiYXNlU3Rv
cmUpIHsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
V1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlE
LnZhbHVlKCksIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVzKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGF0dXNdKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobV9t
ZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3JhZ2VB
Y2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBm
cmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVz
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGF0dXNdKCkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0pOwogfQogCkBAIC0z
NDgsNyArMzg4LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVl
c3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUmVnaXN0cmFibGUKICAgICAvLyBjb21pbmcgZnJv
bSBJUEMuIFN0cmluZ3Mgd2hpY2ggYXJlIHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFz
IGxvbmcgYXMgbm9ib2R5IG9uIHRoaXMgdGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNlCiAgICAgLy8g
dG8gdGhvc2Ugc3RyaW5ncy4KICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluSW5OZWVkT2ZTdG9y
YWdlQWNjZXNzID0gV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQ
YWdlSUQsIG9wZW5lckRvbWFpbiA9IFdURk1vdmUob3BlbmVyRG9tYWluKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUp
CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJP
cGVuZXIoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQs
IFdURk1vdmUob3BlbmVyRG9tYWluKSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUp
CiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFnZUlELCBX
VEZNb3ZlKG9wZW5lckRvbWFpbikpOwogICAgIH0pOwogfQpAQCAtMzU3LDE4ICszOTksMjYgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyhj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlz
b2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSAmJiAhbV9kYXRh
YmFzZVN0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRTdG9y
YWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWlu
KSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdhc0dyYW50ZWRBY2Nlc3MpIG11
dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsKKyAg
ICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkgeworICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3Jl
LT5ncmFudFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9w
RnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRl
ZEFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vz
c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2Fz
R3JhbnRlZEFjY2Vzcyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgfSk7CisgICAgICAgIH0gZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkgeworICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21h
aW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJv
bXB0ZWROb3csIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XShib29sIHdhc0dyYW50ZWRBY2Nlc3MpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RU
YXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHdhc0dyYW50ZWRBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHdhc0dyYW50ZWRBY2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtNDIzLDExICs0NzMsMTMg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tz
KCkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXNd
IHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIG1fbWVtb3J5U3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCk7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRy
eSgpOworICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKSB7CisgICAgICAgICAgICBtX2RhdGFi
YXNlU3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAg
ICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOwor
ICAgICAgICB9IGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsKKyAgICAg
ICAgfQogICAgIH0pOwogfQogCkBAIC00NzYsOCArNTI4LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5
JiBmcmEKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291
cmNlRG9tYWluLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpCiB7CiAgICAgcG9z
dFRhc2soW3RoaXMsIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwg
dG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgc291cmNlRG9t
YWluID0gc291cmNlRG9tYWluLmlzb2xhdGVkQ29weSgpLCBpc1JlZGlyZWN0LCBpc01haW5GcmFt
ZV0gewotCi0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFz
ZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5sb2dGcmFtZU5hdmlnYXRpb24o
dGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgc291cmNlRG9tYWluLCBpc1JlZGlyZWN0LCBp
c01haW5GcmFtZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5sb2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0RG9tYWluLCB0b3BGcmFt
ZURvbWFpbiwgc291cmNlRG9tYWluLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CiAgICAgfSk7
CiB9CkBAIC00ODUsMTcgKzUzOCwyMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJgogdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJnZXRE
b21haW4gPSB0YXJnZXREb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9w
RnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGxhc3RTZWVuLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1f
ZGF0YWJhc2VTdG9yZS0+bG9nU3VicmVzb3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJh
bWVEb21haW4sIGxhc3RTZWVuKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21h
aW4sIHRvcEZyYW1lRG9tYWluLCBsYXN0U2Vlbik7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZy
YW1lRG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9t
YWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RT
ZWVuLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgcG9zdFRhc2soW3RoaXMsIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENv
cHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgbGFz
dFNlZW4sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRh
YmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxv
YWRpbmcodGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBl
bHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nU3Vi
cmVzb3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsK
IAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAg
LTUwNSw5ICs1NjIsMTAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWEKIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJn
ZXREb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICAgICBwb3N0VGFzayhbdGhpcywgc291cmNlRG9tYWluID0gc291cmNlRG9tYWluLmlzb2xh
dGVkQ29weSgpLCB0YXJnZXREb21haW4gPSB0YXJnZXREb21haW4uaXNvbGF0ZWRDb3B5KCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3Jl
KQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5sb2dTdWJyZXNvdXJjZVJlZGlyZWN0KHNv
dXJjZURvbWFpbiwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9y
ZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJlc291cmNlUmVkaXJlY3Qoc291
cmNlRG9tYWluLCB0YXJnZXREb21haW4pOwotCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNTE3LDcgKzU3NSw5IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQor
ICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5sb2dVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsK
KyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmxvZ1VzZXJJbnRlcmFjdGlvbihkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTUyOCw3ICs1ODgsOSBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24o
Y29uc3QgUmVnaXN0cmFibGVEb21haQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3Rv
cmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmNsZWFyVXNlckludGVyYWN0aW9uKGRv
bWFpbik7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5jbGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4pOwogICAgICAgICBwb3N0VGFz
a1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTUzNyw3ICs1
OTksOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihkb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaGFkVXNlckludGVy
YWN0aW9uID0gbV9kYXRhYmFzZVN0b3JlID8gbV9kYXRhYmFzZVN0b3JlLT5oYXNIYWRVc2VySW50
ZXJhY3Rpb24oZG9tYWluKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlT
dG9yZS0+aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbikgOiBmYWxzZTsKICAgICAgICAgcG9z
dFRhc2tSZXBseShbaGFkVXNlckludGVyYWN0aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoaGFkVXNlckludGVyYWN0aW9uKTsKICAgICAgICAgfSk7CkBAIC01NDksNyArNjEy
LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRD
b3B5KCksIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBp
ZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRMYXN0
U2Vlbihkb21haW4sIHNlY29uZHMpOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQog
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TGFzdFNlZW4oZG9tYWluLCBzZWNvbmRzKTsK
ICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
fSk7CkBAIC01NjAsNyArNjI1LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRv
bWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAg
ICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNl
dFByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3Rv
cmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZShkb21h
aW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKQEAgLTU3MSw3ICs2MzgsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRAogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWlu
ID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
KyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9y
ZS0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CisgICAgICAgIGVsc2UgaWYgKG1f
bWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRWZXJ5UHJldmFsZW50
UmVzb3VyY2UoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC01OTQsNyArNjYzLDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RU
YXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJv
b2wgaXNQcmV2YWxlbnRSZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5p
c1ByZXZhbGVudFJlc291cmNlKGRvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1ByZXZh
bGVudFJlc291cmNlID0gbV9kYXRhYmFzZVN0b3JlID8gbV9kYXRhYmFzZVN0b3JlLT5pc1ByZXZh
bGVudFJlc291cmNlKGRvbWFpbikKKyAgICAgICAgICAgIDogbV9tZW1vcnlTdG9yZSA/IG1fbWVt
b3J5U3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOwogICAgICAgICBw
b3N0VGFza1JlcGx5KFtpc1ByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoaXNQcmV2YWxlbnRSZXNvdXJjZSk7CiAgICAgICAgIH0pOwpAQCAtNjA2LDcg
KzY3Niw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvCiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xh
dGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlID0gbV9t
ZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKGRvbWFp
bikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IG1fZGF0
YWJhc2VTdG9yZSA/IG1fZGF0YWJhc2VTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9t
YWluKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5
KFtpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGlzVmVyeVByZXZhbGVudFJlc291cmNlKTsKICAgICAgICAgfSk7CkBAIC02MTgsNyArNjg5
LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihjb25zdCBSZWdpc3QKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3Vy
Y2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4u
aXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihzdWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21haW4pIDogZmFsc2U7
CisgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyID0gbV9kYXRhYmFz
ZVN0b3JlID8gbV9kYXRhYmFzZVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
c3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKQorICAgICAgICAgICAgOiBtX21lbW9y
eVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1
YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFpbikgOiBmYWxzZTsKICAgICAgICAgcG9zdFRh
c2tSZXBseShbaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKTsKICAgICAg
ICAgfSk7CkBAIC02MzAsNyArNzAyLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBSZWdpc3RyYWIKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1l
RG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0g
dG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pIDog
ZmFsc2U7CisgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gbV9kYXRh
YmFzZVN0b3JlID8gbV9kYXRhYmFzZVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIo
c3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0
b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbikgOiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShb
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKTsKICAgICAgICAgfSk7CkBAIC02NDIs
NyArNzE1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0
ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0g
ZG9tYWluUmVkaXJlY3RlZEZyb20uaXNvbGF0ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRUbyA9
IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+
aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGRvbWFpblJlZGlyZWN0ZWRGcm9tLCBkb21haW5S
ZWRpcmVjdGVkVG8pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvID0gbV9kYXRhYmFzZVN0b3JlID8gbV9kYXRhYmFzZVN0b3JlLT5pc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8oZG9tYWluUmVkaXJlY3RlZEZyb20sIGRvbWFpblJlZGlyZWN0ZWRUbykK
KyAgICAgICAgICAgIDogbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUmVnaXN0ZXJl
ZEFzUmVkaXJlY3RpbmdUbyhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRv
KSA6IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8sIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8pOwogICAgICAgICB9KTsKQEAgLTY1NCw3ICs3MjgsOSBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAg
cG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAg
ICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsK
KyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC02NjUsNyArNzQxLDkg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGQKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwg
dmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRh
YmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRHcmFuZGZhdGhlcmVk
KGRvbWFpbiwgdmFsdWUpOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0R3JhbmRmYXRoZXJlZChkb21haW4sIHZhbHVlKTsKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7
CkBAIC02NzYsNyArNzU0LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG8KICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRl
ZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQgPSBtX21l
bW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNHcmFuZGZhdGhlcmVkKGRvbWFpbikgOiBmYWxz
ZTsKKyAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQgPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2Rh
dGFiYXNlU3RvcmUtPmlzR3JhbmRmYXRoZXJlZChkb21haW4pCisgICAgICAgICAgICA6IG1fbWVt
b3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQoZG9tYWluKSA6IGZhbHNl
OwogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc0dyYW5kRmF0aGVyZWQsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihpc0dyYW5kRmF0aGVyZWQpOwogICAgICAgICB9KTsKQEAgLTY4
OCw3ICs3NjcsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKGNvbnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVE
b21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAg
ICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5z
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9t
YWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbihzdWJGcmFtZURvbWFpbiwg
dG9wRnJhbWVEb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTY5OSw3ICs3ODAsOSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKGNv
bnN0IFJlZwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRh
c2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRv
cEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3Jl
KQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW4oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKTsKKyAgICAgICAgZWxz
ZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbihzdWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21h
aW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKQEAgLTcxMCw3ICs3OTMsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdAogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN1YnJlc291cmNl
RG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0
ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisg
ICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZFRvKTsKKyAgICAgICAgZWxzZSBp
ZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZFRv
KTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgfSk7CkBAIC03MjEsNyArODA2LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2kKICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdWJyZXNvdXJjZURv
bWFpbiA9IHN1YnJlc291cmNlRG9tYWluLmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVk
RnJvbSA9IGRvbWFpblJlZGlyZWN0ZWRGcm9tLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkK
KyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dEZyb20oc3VicmVzb3VyY2VEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKKyAgICAgICAg
ZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRp
cmVjdGVkRnJvbSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwpAQCAtNzMyLDcgKzgxOSw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0
cmFiCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhb
dGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgdG9w
RnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJl
Y3RlZFRvID0gZG9tYWluUmVkaXJlY3RlZFRvLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkK
KyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8pOworICAgICAgICBlbHNlIGlmICht
X21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlx
dWVSZWRpcmVjdFRvKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8pOwogICAgICAg
ICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAg
LTc0Myw3ICs4MzIsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaXN0cgogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJh
bWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVk
aXJlY3RlZEZyb20uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9k
YXRhYmFzZVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFtZURvbWFp
biwgZG9tYWluUmVkaXJlY3RlZEZyb20pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3Jl
KQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC03NTUsMTMg
Kzg0NiwxOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVD
b29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZAogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX21lbW9y
eVN0b3JlKSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSAmJiAhbV9kYXRhYmFzZVN0b3Jl
KSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX21lbW9yeVN0b3Jl
LT51cGRhdGVDb29raWVCbG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKworICAgICAgICBhdXRvIGNhbGxiYWNrQWdncmVn
YXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNl
U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5
U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhb
Y2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0p
OwogICAgIH0pOwogfQogCkBAIC03NzAsMTQgKzg2NywxOSBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZUZvckRvbWFpbnMo
Y29ucwogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91
bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluc1RvQmxvY2sgPSBjcm9z
c1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3Rv
cmUpIHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsK
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+
dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAg
ICAgIG1fZGF0YWJhc2VTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFp
bnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlS
ZWYoKV0oKSB7IH0pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNU
b0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYo
KV0oKSB7IH0pOwogICAgIH0pOwogfQogCkBAIC03ODYsMTQgKzg4OCwxOSBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJsb2NraW5nU3RhdGVGb3JE
b21haW5zKGNvbnN0CiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0
ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jv
c3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsK
KyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKICAgICAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJC
bG9ja2luZ1N0YXRlRm9yRG9tYWlucyhkb21haW5zLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAg
ICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgfSk7
CisKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VT
dG9yZS0+Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhkb21haW5zLCBbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOworICAgICAgICBl
bHNlIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJC
bG9ja2luZ1N0YXRlRm9yRG9tYWlucyhkb21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2Fs
bGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwogICAgIH0pOwogfQogCkBAIC04MDQs
MjIgKzkxMSwzNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcgogICAgICAgICBpZiAobV9wZXJz
aXN0ZW50U3RvcmFnZSkKICAgICAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPmNsZWFyKCk7
CiAKLSAgICAgICAgQ29tcGxldGlvbkhhbmRsZXJDYWxsaW5nU2NvcGUgY29tcGxldGlvbkhhbmRs
ZXJDYWxsZXIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSAmJiAhbV9kYXRhYmFzZVN0
b3JlKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRm
YXRoZXJTdGF0aXN0aWNzOjpZZXMpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBCZWZvcmUgYmVpbmcgY2xlYXJlZCwgbV9tZW1v
cnlTdG9yZSBhbmQgbV9kYXRhYmFzZVN0b3JlIGFyZSBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5k
ZmF0aGVyIGRhdGEuIik7CisKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpIHsKLSAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVk
VGhpcy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjb21wbGV0aW9uSGFuZGxlckNhbGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkgeworICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5j
bGVhcihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBzaG91
bGRHcmFuZGZhdGhlciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNv
cHlSZWYoKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0
aGVyID09IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGFiYXNlU3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXSgpIG11dGFibGUgeyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9M
T0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBBZnRlciBiZWluZyBjbGVhcmVk
LCBtX2RhdGFiYXNlU3RvcmUgaXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRh
LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ug
aWYgKG1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5UmVmKCksIHNob3VsZEdyYW5k
ZmF0aGVyLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0g
U2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIu
cmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmdyYW5k
ZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbY2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShj
YWxsYmFja0FnZ3JlZ2F0b3IpXSgpIG11dGFibGUgeyB9KTsKICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudCBBZnRlciBiZWluZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGlz
IG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChz
aG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50IEJlZm9yZSBiZWluZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlp
bmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsKICAgICAgICAgfQogICAgIH0pOwogfQpAQCAtODM3
LDcgKzk1OCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kCiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kcywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAg
ICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25k
cyk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9y
eVN0b3JlLT5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKHNlY29uZHMpOwogICAgICAgICBw
b3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTg0
Nyw3ICs5NzAsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlYwogewogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2soW3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAg
ICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNS
ZW1vdmFsKHNlY29uZHMpOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKHNlY29uZHMpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwpAQCAtODU4LDcgKzk4Myw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vj
b25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRh
YmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRHcmFuZGZhdGhlcmlu
Z1RpbWUoc2Vjb25kcyk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoc2Vjb25kcyk7CiAKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC05MDMs
NyArMTAzMCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5CiB7CiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnQsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAg
ewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9y
ZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMo
bWF4aW11bUVudHJ5Q291bnQpOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobWF4aW11bUVu
dHJ5Q291bnQpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwpAQCAtOTE1LDcgKzEwNDQsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdQogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgcHJ1bmVU
YXJnZXRDb3VudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAo
bV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRQcnVuZUVu
dHJpZXNEb3duVG8ocHJ1bmVUYXJnZXRDb3VudCk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5
U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8o
cHJ1bmVUYXJnZXRDb3VudCk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CkBAIC05MjcsNyArMTA1OCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlv
bkhhCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlz
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VT
dG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZh
dWx0VmFsdWVzKCk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKIAogICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAppbmRleCAyMDU4Zjc4Y2I5NGNh
YjUwNDczZTdmZGUyNTA2YjhjZTk1ZmI2YmI3Li5kNDM4ZGI1NWZmOTA3OTdkMTkwODQ0ZmVmYjNi
NGY2NmM3ODlkYzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oCkBAIC01Miw2ICs1Miw3IEBAIGVudW0gY2xhc3MgU2hvdWxkU2FtcGxlIDogYm9vbDsK
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrU2Vzc2lvbjsKK2NsYXNzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOwogY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOwogY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlOwogY2xhc3MgV2ViRnJhbWVQcm94eTsKQEAgLTE5MSw2ICsxOTIsNyBAQCBwcml2YXRl
OgogICAgIFJlZjxXb3JrUXVldWU+IG1fc3RhdGlzdGljc1F1ZXVlOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+IG1fbWVtb3J5U3RvcmU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZT4gbV9wZXJzaXN0ZW50U3RvcmFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+IG1fZGF0YWJhc2VTdG9yZTsKIAogICAgIFJ1bkxvb3A6
OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9kYWlseVRhc2tzVGltZXI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
aW5kZXggNjM4ODEzNDliYmI1MmY1NTJlM2FhMWY3Y2FkNDg1NDY3ZTlhMTU3Yy4uNmQ0NDMzNDI1
M2I2MTU4NDI2ZDFlZTU4YzU5ZjI1NzEyYTA1MDAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTcyLDYgKzcyLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25D
aGVja3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1
cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgpAQCAtMzI2LDYg
KzMyNyw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhO
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgfQogI2VuZGlmCiAKKyAgICBX
ZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldEl0cERh
dGFiYXNlTW9kZUVuYWJsZWQocGFyYW1ldGVycy5zaG91bGRFbmFibGVJdHBEYXRhYmFzZU1vZGUp
OworCiAgICAgYXV0byogZGVmYXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Np
b25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6
IHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCiAg
ICAgICAgIGRlZmF1bHRTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zZXRDb29raWUo
Y29va2llKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggYzZkZjA4ZTlm
Yjc3NjZmNzcwYWZhZGVmMWFhN2YyMTI5NDlkMWY1NS4uNmQzYTUyYWUzZGRiMmJiMjkwYWE3NWZi
NjZmNDMxNDFhYWIzN2U1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAg
LTkzLDYgKzkzLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5j
b2RlKElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JL
RVIpCiAgICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8
IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgdXJs
U2NoZW1lc1NlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29y
a2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXk7CiAjZW5kaWYKKyAgICBlbmNvZGVyIDw8IHNob3Vs
ZEVuYWJsZUl0cERhdGFiYXNlTW9kZTsKIH0KIAogYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmFtZXRlcnMmIHJlc3VsdCkKQEAgLTIxNyw2ICsyMTgsOSBAQCBib29sIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVy
LCBOZXR3b3JrUHJvYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAorICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUocmVzdWx0LnNob3VsZEVuYWJsZUl0cERhdGFiYXNlTW9kZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmgKaW5kZXggMmZkM2JlOWZkZWQ5ODBiNzU3M2NlM2I1MTZiMDdhOTZmYWRh
ZjczYi4uNTMyY2VmMzg4NDRjOGY3MmJiYjc0ZDMxMTU5YjljNGIzMzIyMTYwNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTExLDYgKzExMSw3IEBAIHN0cnVjdCBOZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1l
c1NlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlOwogICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBib29s
IHNob3VsZEVuYWJsZUl0cERhdGFiYXNlTW9kZSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCmlu
ZGV4IGJkYmZkZmMyMDUxYzZmNDQ4Nzc0OWQwZmI0ZGI3MGQwY2ViNzI3YTkuLjA1MGM4NTE0ZDhm
N2RhNzAyOTBiM2IwNzMxMTFjYjU5YjdjODc5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0NywxMiBAQCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZh
bAogICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gcmVzb3VyY2VT
dGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXplKCk7CiAgICAgYXV0byBz
dWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5zdWJm
cmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zLnNpemUoKTsKICAgICBhdXRvIHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudCA9IHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG8uc2l6ZSgpOwotICAgIAorCisgICAgcmV0dXJuIGNhbGN1bGF0ZVJlc291cmNlUHJldmFs
ZW5jZShzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB0
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIGN1cnJlbnRQcmV2YWxlbmNlKTsKK30KKwor
UmVzb3VyY2VMb2FkUHJldmFsZW5jZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjo6
Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZU9yaWdpbnNDb3VudCwgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50LCB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVk
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBj
dXJyZW50UHJldmFsZW5jZSkKK3sKICAgICBpZiAoIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9y
aWdpbnNDb3VudAogICAgICAgICAmJiAhc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
CiAgICAgICAgICYmICFzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xhc3NpZmllci5oIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgKaW5kZXggYWNmMWYzODlkZDUxYTAwYzUxMDdk
YzY3MmY5ZDNmYmE5ZjJiZmVmMC4uYWYzZTIzNGMwYjYxM2RkZmQwMDVhZTYwOTBlOTIzMDQ1ZjI1
MTViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsNiArNDIs
NyBAQCBwdWJsaWM6CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIoKSA9IGRl
ZmF1bHQ7CiAgICAgdmlydHVhbCB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIoKSA9
IGRlZmF1bHQ7CiAgICAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBjYWxjdWxhdGVSZXNvdXJjZVBy
ZXZhbGVuY2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VT
dGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY3VycmVudFByZXZhbGVuY2UpOworICAg
IFJlc291cmNlTG9hZFByZXZhbGVuY2UgY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHVuc2ln
bmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgdW5zaWduZWQgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZSBjdXJyZW50UHJldmFsZW5jZSk7CiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBib29sIGNsYXNzaWZ5KHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZU9yaWdpbnNDb3VudCwgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
LCB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKaW5kZXggYjkwODRiZWI5MGE0M2Fi
ZjViNzU0ODY0ZTkwMmM2NTI0MWEyNTk5MS4uZTY1NWMzYjk1ZWNlYzg2MWZiYjVhZmRkOTFiNzgz
ODhlY2NiYjI2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5j
ZXMueWFtbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCkBA
IC0xMzc5LDYgKzEzNzksMTQgQEAgSXRwRGVidWdNb2RlRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJs
ZURlc2NyaXB0aW9uOiAiSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVudGlvbiBEZWJ1ZyBNb2Rl
IgogICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwogCitJdHBEYXRhYmFz
ZU1vZGVFbmFibGVkOgorICB0eXBlOiBib29sCisgIGRlZmF1bHRWYWx1ZTogZmFsc2UKKyAgaHVt
YW5SZWFkYWJsZU5hbWU6ICJJVFAgRGF0YWJhc2UgQmFja2VuZCBNb2RlIgorICBodW1hblJlYWRh
YmxlRGVzY3JpcHRpb246ICJJbnRlbGxpZ2VudCBUcmFja2luZyBQcmV2ZW50aW9uIERhdGFiYXNl
IEJhY2tlbmQgTW9kZSIKKyAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMK
KyAgY2F0ZWdvcnk6IGludGVybmFsCisKIFNlcnZpY2VXb3JrZXJzRW5hYmxlZDoKICAgdHlwZTog
Ym9vbAogICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfU0VSVklDRV9XT1JLRVJTX0VOQUJMRUQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CmluZGV4IDU5Y2VmODNhNTIzOWVlYTBjYTE5N2Y2OGNiMzcyMDY3Yjk3OWUwMjkuLjA0
MzVhOTUwZWRmZDJhZTUxYzQzYWJkODFmMDUxOTcyNDRlZjdlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAt
NDIsOCArNDIsMTAgQEAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldFN0cmVhbS5jcHAKIE5l
dHdvcmtQcm9jZXNzL1BpbmdMb2FkLmNwcAogTmV0d29ya1Byb2Nlc3MvUHJlY29ubmVjdFRhc2su
Y3BwCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAorTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiAKIE5ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4
IGM0M2U0ZTUwOTBiZWRjNzFjOWRlNjNmODY3Zjc0MGE5NDFmZDBmMTIuLmMwMGZhNTdiOTdkYTk2
ZmIzZGFjYzdiNDYyZGExZDRmNDM3MWZlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5
LDYgKzI5LDcgQEAgTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0K
IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KIE5ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAK
QEAgLTMzMiw3ICszMzMsNiBAQCBVSVByb2Nlc3MvQ29jb2EvTWVkaWFDYXB0dXJlVXRpbGl0aWVz
Lm1tCiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2Ev
UGFnZUNsaWVudEltcGxDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tbQotVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZUNvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29h
Lm1tCiBVSVByb2Nlc3MvQ29jb2EvU2Vzc2lvblN0YXRlQ29kaW5nLm1tCiBVSVByb2Nlc3MvQ29j
b2EvU3lzdGVtUHJldmlld0NvbnRyb2xsZXJDb2NvYS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I0
OGUxN2MxYzgxMWE4MjUzMjA4NGU3YmFhODYyYTU5MTU0NzE4MS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCi0KLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotCi0jaW1wb3J0IDxXZWJDb3JlL1JlZ2lzdHJh
YmxlRG9tYWluLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdp
c3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IGluaXRPbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgmaW5pdE9uY2UsIF57Ci0gICAgICAgIFNl
Y29uZHMgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbiJdKTsKLSAgICAgICAgaWYgKHRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb24gPiAwX3MgJiYgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA8PSAyNF9oICogMzApCi0g
ICAgICAgICAgICBzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKHRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOwotCi0gICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZv
cktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwiXSk7Ci0gICAgICAgIGlmIChtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwgPiAwX3MgJiYgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIDwgMV9o
KQotICAgICAgICAgICAgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk7Ci0KLSAgICAgICAgU2Vjb25kcyBn
cmFuZGZhdGhlcmluZ1RpbWUoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10g
ZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSJd
KTsKLSAgICAgICAgaWYgKGdyYW5kZmF0aGVyaW5nVGltZSA+IDBfcyAmJiBncmFuZGZhdGhlcmlu
Z1RpbWUgPD0gMjRfaCAqIDcpCi0gICAgICAgICAgICBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoZ3Jh
bmRmYXRoZXJpbmdUaW1lKTsKLQotICAgICAgICBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6
QCJJdHBEZWJ1Z01vZGUiXSk7Ci0gICAgICAgIGF1dG8qIGRlYnVnTWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzdHJpbmdGb3JL
ZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2UiXTsKLSAg
ICAgICAgaWYgKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpCi0gICAgICAgICAgICBzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShSZWdpc3RyYWJsZURvbWFpbiB7IGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UgfSk7Ci0KLSAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyhbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAi
XSk7Ci0gICAgICAgIGlmIChjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyA+IDBf
cyAmJiBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyA8PSAyNF9oICogMzY1KQot
ICAgICAgICAgICAgc2V0Q2FjaGVNYXhBZ2VDYXAoY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRS
ZXNvdXJjZXMpOwotICAgICAgICAKLSAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0Fn
ZUNhcChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6
QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAiXSk7Ci0gICAg
ICAgIGlmIChjbGllbnRTaWRlQ29va2llc0FnZUNhcCA+IDBfcyAmJiBjbGllbnRTaWRlQ29va2ll
c0FnZUNhcCA8PSAyNF9oICogMzY1KQotICAgICAgICAgICAgc2V0QWdlQ2FwRm9yQ2xpZW50U2lk
ZUNvb2tpZXMoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOwotICAgIH0pOwotfQotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQ
b29sQ29jb2EubW0KaW5kZXggOTg3NDZjMzdjNTI0Yzg3ODRiN2E2ZTgyNjY3NjY2NTE3NWY2ZmIw
ZC4uMzgwOGQ4OWM2ZjM5ZDk1MjJlYjZiMDQ4YzQyODM5OWZiMDJhN2VkNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBA
IC0yOTYsNiArMjk2LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXpl
TmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICNpZiBFTkFCTEUoUFJP
WElNSVRZX05FVFdPUktJTkcpCiAgICAgcGFyYW1ldGVycy53aXJlbGVzc0NvbnRleHRJZGVudGlm
aWVyID0gbV9jb25maWd1cmF0aW9uLT53aXJlbGVzc0NvbnRleHRJZGVudGlmaWVyKCk7CiAjZW5k
aWYKKworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSXRwRGF0YWJhc2VNb2RlID0gW2RlZmF1
bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVn
JUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXRwRGF0YWJhc2VNb2RlRW5hYmxlZEtleSgpLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCldXTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1J
bnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
cm92aXNpb25hbFBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9u
YWxQYWdlUHJveHkuaAppbmRleCA1ZGI5ODg2NzYxMGQ0ZTJhMWNmZTA4ZjExZTJiZDgxYmU4Nzhh
MzczLi43M2Y4ODRhYjkxMmJjYjFmZjZlNTU4ZDZkZDc2YjA4Nzc1OGEyYWI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJTYW5kYm94RXh0
ZW5zaW9uLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5LmgiCisjaW5j
bHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJzaXRlUG9saWNpZXNE
YXRhLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGM5Njc0ZjlmNzA2MTZhMzc4MTY0YTYzNjk4M2M1
YzJiY2FjZWMwZTEuLjZkMzg4ZGJkOTlkOTJkMTViYTVlYTNiNjJlNWI2YmM1NzY2NTc5NmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTg2LDYgKzg2
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NXYXJtaW5nLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
PgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTGFuZ3VhZ2UuaD4K
ICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjQzNjU1MzZkNjEyNzQ3YzYwZjY3Yjg3NTc5
MDNmMWU4NTkxOWFmNS4uZDMxZDhlYzUxOTAzYjMzZGU2YTJjZjZmMDlkNGQ3MDllN2UxOWU0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0zNTI3LDYgKzM1MjcsOCBAQAogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4
RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzYyQjc0ODQxMjBCQkEyRDAwODE5MzM5
IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdBMEQ3ODYxMjIwNzkxRUMwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdBMTUwNjcyMURENTYyOTgwMDFGNEI1OCAvKiBjb20uYXBwbGUuV2ViS2l0
LnBsdWdpbi1jb21tb24uc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gImNvbS5hcHBsZS5XZWJL
aXQucGx1Z2luLWNvbW1vbi5zYiI7IHBhdGggPSAiRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9jb20u
YXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IiOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQk3QTFFMkE4NDFFRUZFODhBMDAzN0EwRTAgLyogQVBJTm90aWZpY2F0aW9u
UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJTm90aWZpY2F0
aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0EzQUNFMUExRUVF
Rjc4QzAwQTg2NEE0IC8qIEFQSUluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1NDYsNiArMzU0OCw5IEBA
CiAJCTdBOUNEOEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QUI2RUE0NDFFRUFBRTIzMDAwMzdCMkIgLyogQVBJSWNvbkRhdGFiYXNlQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUljb25EYXRhYmFzZUNsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUI2RUE0NjFFRUFCNkIwMDAwMzdCMkIgLyog
QVBJR2VvbG9jYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBUElHZW9sb2NhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdBQ0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUNFODJFODIyMUNBRTA3MDAwREE5NEMg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHBhdGggPSBD
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdBQ0U4MkU5MjIxREU3MjIwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FG
MjM2MUUxRTc5QTNCNDAwNDM4QTA1IC8qIFdlYkVycm9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJFcnJvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QUYyMzYxRjFFNzlBM0Q4MDA0MzhBMDUgLyogV2ViRXJyb3JzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3QUYyMzYyMjFFNzlBNDMxMDA0MzhBMDUgLyogV2ViRXJyb3JzQ29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFcnJvcnNDb2NvYS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2OTYsNyArMzcwMSw2IEBACiAJCTgz
NzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFnZURpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRC
MjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM3MkRCMkUxQTY3N0Q0QTAw
QzY5N0M1IC8qIFdLRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzN0E2NjAwMjBFMkFEODQwMEE5REJEOCAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2MjFBNjhCMzQyMDAz
MEYzODYgLyogQVBJRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQVBJRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNjgxQTY4QkVCQzAwMzBGMzg2IC8qIF9XS0RpYWdub3N0
aWNMb2dnaW5nRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gX1dL
RGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4Mzg5MUI2QTFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzMjEsNyArNTMyNSw2IEBACiAJCQkJ
Q0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5o
ICovLAogCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQ0RBMjlBMUYxQ0JFQjVGQjAwOTAxQ0NGIC8q
IFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywKLQkJCQk4MzdBNjYwMDIwRTJBRDg0
MDBBOURCRDggLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0gKi8s
CiAJCQkJNUNBOTg1NEIyMTBCRUI3MzAwNTdFQjZCIC8qIFNhZmVCcm93c2luZ1dhcm5pbmdDb2Nv
YS5tbSAqLywKIAkJCQkxQTAwMkQ0NzE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29k
aW5nLmggKi8sCiAJCQkJMUEwMDJENDYxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNv
ZGluZy5tbSAqLywKQEAgLTY5MjMsMTAgKzY5MjYsMTUgQEAKIAkJN0E4NDNBMUQyMUU0MUZEOTAw
REVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTdBMEQ3ODYyMjIwNzkxRUQwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgKi8sCisJCQkJN0EwRDc4NjEyMjA3OTFFQzAwRUJDRjU0
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggKi8sCiAJCQkJN0FGQkQz
NjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5j
cHAgKi8sCiAJCQkJN0FGQkQzNjUyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZS5oICovLAogCQkJCTdBRkJEMzY5MjFFNTQyRTgwMDVEQkFDQiAvKiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwICovLAogCQkJCTdBRkJE
MzY4MjFFNTQyRTgwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2UuaCAqLywKKwkJCQk3QUNFODJFODIyMUNBRTA3MDAwREE5NEMgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmNwcCAqLywKKwkJCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMgLyog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCisJCQkJN0FDRTgyRTkyMjFERTcyMjAw
MERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tICovLAogCQkJCTdB
NDFFOUZBMjFGODFEQUMwMEI4OENEQiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCAq
LywKIAkJCQk3QTNGRUNBMTIxRjdDMDk3MDBGMjY3Q0QgLyogU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
ICovLAogCQkJCTdBODQzQTFBMjFFNDFGQjIwMERFRjY2MyAvKiBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwICovLApAQCAtMTA3OTIsNyArMTA4MDAsNiBAQAogCQkJCTJEOTEzNDQ0
MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZVBsdWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRDkyQTc5NjIxMkI2QURBMDBGNDkzRkQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkQ5MTM0NDUyMTJDRjlGMDAwMTI4QUZEIC8qIE5ldHNjYXBlUGx1
Z2luU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTZCRDA1ODY2MjIwQ0U4QzIwMDBCRUQ1
QyAvKiBOZXR3b3JrQWRDbGlja0F0dHJpYnV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
REQ5RjI4MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkYwNjBFMTE2NTQzMTg1MDBG
MzI4MUIgLyogTmV0d29ya0NvbnRlbnRSdWxlTGlzdE1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTFGMDYwRTExNjU0MzE4NTAwRjMyODNGIC8qIE5ldHdvcmtN
RE5TUmVnaXN0ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363255</attachid>
            <date>2019-02-28 13:08:06 -0800</date>
            <delta_ts>2019-03-03 19:01:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194867-20190228130805.patch</filename>
            <type>text/plain</type>
            <size>272171</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNkODczMWMzNmM0Mjg5
NGZhZjU2MTVhMjQzNmJiOTBmMGY3OThiZi4uODJiZmE3N2VlN2MwZDAwNDZjZTc5ZWUwMWMzYzhj
OGZmOTJiYzVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBv
cnQgdXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxz
byBleHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdl
YkNvcmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRh
YmFzZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIw
MTktMDItMjcgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29u
dGVudENoYW5nZU9ic2VydmVyXSBNb3ZlIF9XS09ic2VydmluZ0NvbnRlbnRDaGFuZ2VzIGZyb20g
Z2xvYmFsIHRvIENvbnRlbnRDaGFuZ2VPYnNlcnZlciBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5M2Q5ODM4
NDMzMDk0NGJhZTM1NjEzMTY5NzUxYmJiMWZiMmNiNjAyLi41MDFlZWFhNDBlZTlmZmZhNTMwYTJh
NDA2YjVkNzdjMjU1NjA3ZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4MyBAQAorMjAxOS0wMi0y
MSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgYSBT
UUxpdGUgZGF0YWJhc2UgdG8gaG9sZCB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkYXRhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ4NjcKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0MjQwODU0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGFi
YXNlIHBsaXN0IGlzIGluZWZmaWNpZW50LiBJdCByZXF1aXJlcyBtb3JlIG1lbW9yeSB1c2UKKyAg
ICAgICAgdGhhbiBpdCBuZWVkcywgYW5kIGZvcmNlcyBsb3RzIG9mIGxvb3BpbmcgYW5kIHN0cmlu
ZyBjb21wYXJpc29ucyB0byBmaW5kIGluZm9ybWF0aW9uLgorCisgICAgICAgIFRoaXMgcHJvYmxl
bSBoYXMgYWxyZWFkeSBiZWVuIHNvbHZlZCBpbiB0aGUgZm9ybSBvZiByZWxhdGlvbmFsIGRhdGFi
YXNlcy4gV2UgdXNlIHRoZW0KKyAgICAgICAgZWxzZXdoZXJlIGluIFdlYktpdCwgYW5kIHNob3Vs
ZCBkbyBzbyBmb3IgdGhpcyBzdG9yYWdlIGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBwYXRjaCBj
cmVhdGVzIGFuIG9wdGlvbmFsIFNRTGl0ZSBkYXRhYmFzZSB0byBoYW5kbGUgSVRQIG9wZXJhdGlv
bnMuCisKKyAgICAgICAgMS4gSXQgYWRkcyBhIG5ldyBpbnRlcm5hbCBleHBlcmltZW50YWwgZmVh
dHVyZSBmbGFnIHRvIGFjdGl2YXRlIGl0LiBJdCByZXF1aXJlcyB0aGUgdXNlcgorICAgICAgICAg
ICBleGl0IGFuZCByZXN0YXJ0IHRoZSBwcm9jZXNzIHRvIHRha2UgZWZmZWN0LgorICAgICAgICAy
LiBJdCBwb3B1bGF0ZXMgaXRzZWxmIGZyb20gdGhlIGV4aXN0aW5nIHBsaXN0IGZpbGUgKGlmIGl0
IGV4aXN0cykuCisgICAgICAgIDMuIEl0IHN0b3BzIHVzaW5nIHRoZSBwbGlzdCBpbiBmYXZvciBv
ZiB0aGUgZGF0YWJhc2UuCisgICAgICAgIDQuIEl0IGRvZXMgcXVlcmllcyBhbmQgb3RoZXIgb3Bl
cmF0aW9ucyB1c2luZyB0aGUgZGF0YWJhc2UgaW5zdGVhZCBvZiB0aGUgb2xkIGhhc2ggdGFibGUK
KyAgICAgICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3Rv
cnMgdGhlIGV4aXNpdGluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgY2xhc3Mg
aW50byBhIGJhc2UKKyAgICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGNsYXNzLCB3
aGljaCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgaXMgYmFzZWQgb24uCisgICAg
ICAgIEl0IGFkZHMgYSBuZXcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUgdGhh
dCBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBTUUwKKyAgICAgICAgb3BlcmF0aW9ucy4KKwor
ICAgICAgICBUaGVzZSBjb2RlIGNoYW5nZXMgc2hvdWxkIG5vdCBoYXZlIGFueSBpbXBhY3Qgb24g
ZXhpc3Rpbmcgb3BlcmF0aW9ucywgYW5kIHdoZW4gZW5hYmxlZAorICAgICAgICBzaG91bGQgcHJv
ZHVjZSB0aGUgc2FtZSB0ZXN0IHJlc3VsdHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0
YXRlbWVudHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omlu
c2VydERvbWFpblJlbGF0aW9uc2hpcCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRv
bWFpbklERnJvbVN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRhdGFiYXNl
SXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRU
ZWxlbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVj
dXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWlu
KToKKyAgICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6bGlzdFRvU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xhc3NpZnlQcmV2YWxl
bnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhh
c1N0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NV
bmRlck9wZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dTdWJyZXNv
dXJjZVJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNl
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnNldERvbWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
cmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omlz
VmVyeVByZXZhbGVudFJlc291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
ciBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojppc0dyYW5kZmF0aGVyZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclByaW1hcnlEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llVHJlYXRtZW50Rm9yT3JpZ2luIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxv
Y2sgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21h
aW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cHJldmFsZW50RG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Y2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnRvcFByaXZh
dGVseUNvbnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3Rp
Y3NJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVz
b3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omlz
RW1wdHkgY29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGFzc2lmeVByZXZhbGVu
dFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRo
ZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnRvZGF5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2ggY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0
b3I8PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Ok9w
ZXJhdGluZ0RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjptZXJnZU9wZXJhdGluZ0Rh
dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZUltcG9ydGFuY2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0
cnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERh
dGFSZWNvcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291
cmNlRm9yRGVidWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1
ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGlt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2xpZW50U2lk
ZUNvb2tpZXNBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OmRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdE
YXRlSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1Rlc3RpbmdFdmVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmg6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6aXNEZWJ1Z01vZGVFbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzdG9yZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXREZWJ1Z0xvZ2dnaW5nRW5h
YmxlZCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok9w
ZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0Rh
dGU6OnRvZGF5KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vjb25kc1NpbmNl
RXBvY2ggY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PSBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNv
bXB1dGVJbXBvcnRhbmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVj
b3Jkcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJv
Y2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFs
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tp
ZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcyBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWlu
Z1JlbW92ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRp
c3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnN0YXRpc3RpY3NFcGlyYXRpb25UaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJh
dGluZ0RhdGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNz
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVh
dGVOZXR3b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmguCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Ok9w
ZXJhdGluZ0RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RvcmUgY29uc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRz
RW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW06IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmVDb2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVj
b3Jkc1Byb2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1dlYlNv
Y2tldExvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpj
bGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2Up
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tp
bmdVcGRhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JEb21haW5zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFyQmxvY2tp
bmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJpbmdUaW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNU
b0RlZmF1bHRWYWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAg
ICAqIFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjo6
Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9jbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmg6CisgICAgICAgICogU2hhcmVk
L1dlYlByZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICog
U291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bv
b2xDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAy
MDE5LTAyLTI3ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT046IENyYXNoIGJlbmVhdGggUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OmxvZ1N1YnJl
c291cmNlTG9hZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaAppbmRleCA3MTc2ZDJmZjZiZTc3NmI5OGY5YzI1NGVjYWM4NjFmYjBjMDI2MzdjLi40Njkx
YzkzOWVkNjRlZWUzNGE4MmI3MTA4OTU3ODU4MDQ2NDM1MTM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaApAQCAtMTQ4LDYgKzE0OCw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEl0cERlYnVnTW9kZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9p
dHBEZWJ1Z01vZGUgPSBpc0VuYWJsZWQ7IH0KICAgICBib29sIGl0cERlYnVnTW9kZUVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2l0cERlYnVnTW9kZTsgfQogCisgICAgdm9pZCBzZXRJdHBEYXRh
YmFzZU1vZGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXRwRGF0YWJhc2VNb2RlID0gaXNF
bmFibGVkOyB9CisgICAgYm9vbCBpdHBEYXRhYmFzZU1vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pdHBEYXRhYmFzZU1vZGU7IH0KKwogICAgIHZvaWQgc2V0UmVzdHJpY3RlZEhUVFBSZXNw
b25zZUFjY2Vzcyhib29sIGlzRW5hYmxlZCkgeyBtX2lzUmVzdHJpY3RlZEhUVFBSZXNwb25zZUFj
Y2VzcyA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgcmVzdHJpY3RlZEhUVFBSZXNwb25zZUFjY2Vz
cygpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXN0cmljdGVkSFRUUFJlc3BvbnNlQWNjZXNzOyB9CiAK
QEAgLTM1MSw3ICszNTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBtb3VzZW1vdmVFdmVudEhhbmRs
aW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbW91c2Vtb3ZlRXZl
bnRIYW5kbGluZ1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQ7IH0KICAgICB2b2lkIHNldE1vdXNlbW92
ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1f
bW91c2Vtb3ZlRXZlbnRIYW5kbGluZ1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQgPSBpc0VuYWJsZWQ7
IH0KICNlbmRpZgotICAgIAorCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMmIHNoYXJlZEZlYXR1cmVzKCk7CiAKIHByaXZhdGU6CkBAIC01MzQsNiArNTM3
LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fbW91c2Vtb3ZlRXZlbnRIYW5kbGluZ1ByZXZlbnRz
RGVmYXVsdEVuYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAKKyAgICBib29sIG1faXRwRGF0YWJh
c2VNb2RlIHsgZmFsc2UgfTsKKwogICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVk
PFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaAppbmRleCA1N2QyYWQ4NjlkNGQyMzE3YWIwNjNiNWQ2YmFl
MTRkOWVmMDlmYTQ2Li5jOWIzMTAyNDQyMDdiYzc2OGZlYzkyOWYwMjVmMDU0NmI5NmIwMzhlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaApAQCAtNjQs
NyArNjQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCB0YWJsZUV4
aXN0cyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQWxsVGFibGVzKCk7Ci0gICAgaW50
IHJ1blZhY3V1bUNvbW1hbmQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcnVuVmFjdXVtQ29t
bWFuZCgpOwogICAgIGludCBydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsKICAgICAKICAg
ICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rp
b25JblByb2dyZXNzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmgKaW5kZXggYTE5M2Q4YzI0YjBiZDAyNDk2NWJiMTA1NDQ2NDIzYmJjOGY1YmZlOS4u
ZjM2NmM3MzAyZjRiYTVhNWY0YWMxYTYxYzE2MjYzMzEzOTMyZDNkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaApAQCAtNzYsNyArNzYsNyBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIGdldENvbHVtbk5hbWUoaW50IGNvbCk7CiAgICAgU1FMVmFsdWUg
Z2V0Q29sdW1uVmFsdWUoaW50IGNvbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGdldENv
bHVtblRleHQoaW50IGNvbCk7Ci0gICAgZG91YmxlIGdldENvbHVtbkRvdWJsZShpbnQgY29sKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgZ2V0Q29sdW1uRG91YmxlKGludCBjb2wpOwogICAg
IFdFQkNPUkVfRVhQT1JUIGludCBnZXRDb2x1bW5JbnQoaW50IGNvbCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgaW50NjRfdCBnZXRDb2x1bW5JbnQ2NChpbnQgY29sKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKGludCBjb2wpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZTIwNzRiOWIyN2MwYzFkZmI0NDBiZWUzYTFhNmIzNGFlYzJjODUyYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTAsMCArMSwxNTM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmgiCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5j
bHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJv
eHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNp
bmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5
LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorI2lu
Y2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5n
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NR
TGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNp
bmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRo
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
KyNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxF
QVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE5ldHdvcmss
ICIlcCAtIE5ldHdvcmtIVFRQU1VwZ3JhZGVDaGVja2VyOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZt
dCwgLi4uKSBSRUxFQVNFX0xPR19FUlJPUl9JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdB
bGxvd2VkKCksIE5ldHdvcmssICIlcCAtIE5ldHdvcmtIVFRQU1VwZ3JhZGVDaGVja2VyOjoiIGZt
dCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlLCBjb25zdCBTdHJp
bmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoKQorICAgIDogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlKHN0b3JlLCB3b3JrUXVldWUpCisgICAgLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKHN0b3Jh
Z2VEaXJlY3RvcnlQYXRoICsgU3RyaW5nKCIvb2JzZXJ2YXRpb25zLmRiIikpCisgICAgLCBtX2Rh
dGFiYXNlKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U+KCkpCisgICAgLCBt
X29ic2VydmVkRG9tYWluQ291bnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBPYnNlcnZlZERvbWFp
bnMiX3MpKQorICAgICwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudChtYWtlVW5pcXVl
UmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJ
TlRPIE9ic2VydmVkRG9tYWlucyAocmVnaXN0cmFibGVEb21haW4sIGxhc3RTZWVuLCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBncmFuZGZhdGhlcmVk
LCBpc1ByZXZhbGVudCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIHRpbWVz
QWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiwgdGltZXNBY2Nlc3NlZEFz
Rmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/
LCA/LCA/LCA/LCA/KSJfcykpCisgICAgLCBtX2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50
KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgp
LCAiSU5TRVJUIElOVE8gVG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3MpKQorICAgICwgbV9k
b21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fc3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiSU5TRVJUIElOVE8gU3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkg
U0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID09ID8iX3MpKQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKG1ha2VV
bmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiSU5T
RVJUIElOVE8gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyAoc291cmNlRG9tYWluSUQsIHRvRG9t
YWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9PSA/Il9zKSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0V4aXN0cyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFz
ZS5nZXQoKSwgIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUbyBXSEVSRSBzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRvRG9tYWluSUQgPSAoU0VMRUNU
IGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PykpIl9zKSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKG1ha2VVbmlxdWVS
ZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiSU5TRVJUIElO
VE8gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICh0YXJnZXREb21haW5JRCwgZnJvbURvbWFp
bklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
RXhpc3RzKG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNl
LmdldCgpLCAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c0Zyb20gV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/IEFORCBmcm9tRG9tYWluSUQgPSAoU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWlu
ID0gPykpIl9zKSkKKyAgICAsIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyhtYWtlVW5p
cXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VS
VCBJTlRPIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgKHN1YkZyYW1lRG9tYWluSUQsIHRv
cEZyYW1lRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV9zdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5FeGlzdHMobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgc3ViRnJhbWVEb21haW5JRCA9ID8gQU5EIHRvcEZy
YW1lRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zKSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWlucyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9k
YXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJTlRPIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMgKHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQpIFNFTEVDVCA/LCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3Mp
KQorICAgICwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMobWFrZVVuaXF1
ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1Qg
RVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hF
UkUgc3VicmVzb3VyY2VEb21haW5JRCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSAoU0VMRUNU
IGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PykpIl9zKSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyhtYWtlVW5pcXVl
UmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIklOU0VSVCBJ
TlRPIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKHN1YnJlc291cmNlRG9tYWluSUQsIHRv
RG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBy
ZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zKSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUb0V4aXN0cyhtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9k
YXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyBBTkQgdG9Eb21h
aW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0
cmFibGVEb21haW4gPSA/KSkiX3MpKQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c0Zyb20obWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2Uu
Z2V0KCksICJJTlNFUlQgSU5UTyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gKHN1YnJl
c291cmNlRG9tYWluSUQsIGZyb21Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3MpKQorICAgICwgbV9z
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMobWFrZVVuaXF1ZVJlZjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgRVhJU1RTIChTRUxF
Q1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBXSEVSRSBzdWJyZXNvdXJj
ZURvbWFpbklEID0gPyBBTkQgZnJvbURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfcykpCisgICAgLCBt
X21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBoYWRVc2VySW50ZXJhY3Rpb24gPSA/LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBkYXRl
TGFzdFNlZW5TdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9
ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBkYXRlUHJldmFs
ZW50UmVzb3VyY2VTdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZh
bGVudCA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1faXNQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVW
ZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBpc1ZlcnlQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisg
ICAgLCBtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIGlzVmVyeVBy
ZXZhbGVudCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8i
X3MpKQorICAgICwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1ha2VVbmlxdWVS
ZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9i
c2VydmVkRG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAwLCBpc1ZlcnlQcmV2YWxlbnQgPSAwIFdI
RVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfcykpCisgICAgLCBtX3VwZGF0ZUhhZFVzZXJJbnRl
cmFjdGlvblN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4o
bV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRl
cmFjdGlvbiA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1faGFk
VXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3Rh
dGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiU0VMRUNUIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBkYXRlTW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblRpbWVTdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9z
KSkKKyAgICAsIG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0g
PyJfcykpCisgICAgLCBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudChtYWtlVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlNFTEVDVCBncmFuZGZh
dGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
cykpCisgICAgLCBtX3VwZGF0ZURhdGFSZWNvcmRzUmVtb3ZlZFN0YXRlbWVudChtYWtlVW5pcXVl
UmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZS5nZXQoKSwgIlVQREFURSBP
YnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9ID8gV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fdXBkYXRlVGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvVXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8V2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uID0gPyBXSEVS
RSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3MpKQorICAgICwgbV91cGRhdGVUaW1lc0FjY2Vzc2Vk
QXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJU3RhdGVtZW50KG1ha2VVbmlxdWVSZWY8
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PihtX2RhdGFiYXNlLmdldCgpLCAiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vz
c0FQSSA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zKSkKKyAgICAsIG1fZmluZEV4
cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQobWFrZVVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UuZ2V0KCksICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNl
cnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSBBTkQgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblRpbWUgPCA/Il9zKSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZO
ZWVkZWQoKTsKKyNlbmRpZgorCisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoKFt0aGlzLCBwYXRo
ID0gbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKV0geworICAgICAgICBpZiAo
IW1fZGF0YWJhc2UtPm9wZW4ocGF0aCkpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpvcGVuIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cywg
ZGF0YWJhc2UgcGF0aDogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gU2luY2Ugd2UgYXJlIHVzaW5nIGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFs
IGRpc3BhdGNoIGJsb2NrcyBtYXkgYmUgY2FsbGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAg
ICAgICBtX2RhdGFiYXNlLT5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7CisKKyAgICAgICAgaWYg
KCFtX2RhdGFiYXNlLT50YWJsZUV4aXN0cygiT2JzZXJ2ZWREb21haW5zIikpIHsKKyAgICAgICAg
ICAgIGlmICghY3JlYXRlU2NoZW1hKCkpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAg
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3JlYXRlU2NoZW1hIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cywgZGF0YWJhc2UgcGF0aDogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2Ut
Pmxhc3RFcnJvck1zZygpLCBwYXRoLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwcmVwYXJlU3RhdGVtZW50cygp
KSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihO
ZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFy
ZVN0YXRlbWVudHMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBw
YXRoOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCksIHBhdGgu
dXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBtX3dvcmtR
dWV1ZS0+ZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0g
eworICAgICAgICBpZiAod2Vha1RoaXMpCisgICAgICAgICAgICB3ZWFrVGhpcy0+Y2FsY3VsYXRl
QW5kU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgfSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzRW1wdHkoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgCisg
ICAgYXV0byYgc3RhdGVtZW50ID0gY29uc3RfY2FzdDxTUUxpdGVTdGF0ZW1lbnQmPihtX29ic2Vy
dmVkRG9tYWluQ291bnQuZ2V0KCkpOworICAgIGlmIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElU
RV9ST1cpCisgICAgICAgIHJlc3VsdCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyBmYWxz
ZSA6IHRydWU7CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0ID0gc3RhdGVtZW50LnJlc2V0KCk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09L
KTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEoKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JF
QVRFIFRBQkxFIE9ic2VydmVkRG9tYWlucyAoZG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwg
cmVnaXN0cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwg
bGFzdFNlZW4gUkVBTCBOT1QgTlVMTCwgaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5V
TEwsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0
aGVyZWQgSU5URUdFUiBOT1QgTlVMTCwgaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgaXNW
ZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRFR0VS
IE5PVCBOVUxMLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24g
SU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFj
Y2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxMKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgT2JzZXJ2ZWREb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1
dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgVG9wTGV2ZWxEb21haW5zICh0b3BMZXZlbERvbWFpbklE
IElOVEVHRVIgUFJJTUFSWSBLRVksIENPTlNUUkFJTlQgZmtEb21haW5JRCBGT1JFSUdOIEtFWSh0
b3BMZXZlbERvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04g
REVMRVRFIENBU0NBREUpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0
ZSBUb3BMZXZlbERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFz
ZS0+bGFzdEVycm9yKCksIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFN0b3JhZ2UgQWNjZXNzIFN0YXRpc3RpY3MuCisg
ICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFN0b3JhZ2VB
Y2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAoZG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9w
TGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIENPTlNUUkFJ
TlQgZmtEb21haW5JRCBGT1JFSUdOIEtFWShkb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCBGT1JFSUdOIEtFWSh0b3BMZXZlbERv
bWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBE
RUxFVEUgQ0FTQ0FERSk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRl
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkp
IC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVG9wIEZyYW1lIFN0
YXRpc3RpY3MuCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRB
QkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKHNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIHRvRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgRk9SRUlHTiBLRVkoc291cmNlRG9t
YWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERF
TEVURSBDQVNDQURFLCBGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVs
RG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7IikpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8g
dGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghbV9kYXRhYmFzZS0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gKHRhcmdldERvbWFpbklEIElOVEVHRVIgTk9UIE5VTEws
IGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBGT1JFSUdOIEtFWSh0YXJnZXREb21haW5J
RCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUsIEZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERv
bWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyIpKSB7CisgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20g
dGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS0+bGFzdEVycm9yKCksIG1f
ZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIFN1YmZyYW1lIFN0YXRpc3RpY3MuCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVj
dXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgKHN1
YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VS
IE5PVCBOVUxMLCBGT1JFSUdOIEtFWShzdWJGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2Vy
dmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsIEZPUkVJR04gS0VZKHRvcEZy
YW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQp
IE9OIERFTEVURSBDQVNDQURFKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkp
IC0gJXMiLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNn
KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gU3VicmVzb3VyY2Ug
U3RhdGlzdGljcy4KKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUg
VEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoc3VicmVzb3VyY2VEb21haW5J
RCBJTlRFR0VSIE5PVCBOVUxMLCB0b3BGcmFtZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIEZP
UkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5z
KGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5J
RCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUpOyIpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIs
IG1fZGF0YWJhc2UtPmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UtPmV4ZWN1
dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3Vi
cmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9U
IE5VTEwsIEZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2
ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgRk9SRUlHTiBLRVkodG9Eb21h
aW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKTsiKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgU3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLT5leGVjdXRlQ29tbWFu
ZCgiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoc3VicmVzb3Vy
Y2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVM
TCwgRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCBGT1JFSUdOIEtFWShmcm9tRG9tYWlu
SUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FE
RSk7IikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFi
YXNlLT5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzKCkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgCisgICAgaWYgKG1fb2JzZXJ2
ZWREb21haW5Db3VudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0c1RvLT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cy0+cHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS0+cHJlcGFyZSgpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cy0+
cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5FeGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLT5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzLT5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20tPnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMtPnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVu
dC0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2Ns
ZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgbV91cGRhdGVIYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVNb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZVN0YXRlbWVudC0+cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQtPnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNG
aXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9T
dG9yYWdlQWNjZXNzQVBJU3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50cyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2Fn
ZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNlbmRp
ZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbnNlcnRPYnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzJiBsb2FkU3RhdGlzdGljcykKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJU
KGNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3QobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21h
aW4pKTsKKyNlbmRpZgorCisgICAgaWYgKG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmRUZXh0KDEsIGxvYWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluLnN0cmluZygpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+
YmluZERvdWJsZSgyLCBsb2FkU3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWlu
U3RhdGVtZW50LT5iaW5kSW50KDMsIGxvYWRTdGF0aXN0aWNzLmhhZFVzZXJJbnRlcmFjdGlvbikg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQt
PmJpbmREb3VibGUoNCwgbG9hZFN0YXRpc3RpY3MubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZEludCg1LCBsb2FkU3RhdGlzdGlj
cy5ncmFuZGZhdGhlcmVkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudC0+YmluZEludCg2LCBsb2FkU3RhdGlzdGljcy5pc1ByZXZhbGVudFJl
c291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0
YXRlbWVudC0+YmluZEludCg3LCBsb2FkU3RhdGlzdGljcy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQtPmJpbmRJbnQoOCwgbG9hZFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC0+YmluZElu
dCg5LCBsb2FkU3RhdGlzdGljcy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50
ZXJhY3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWlu
U3RhdGVtZW50LT5iaW5kSW50KDEwLCBsb2FkU3RhdGlzdGljcy50aW1lc0FjY2Vzc2VkQXNGaXJz
dFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKSAhPSBTUUxJVEVfT0spIHsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGZhaWxl
ZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+
bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1faW5zZXJ0T2JzZXJ2ZWRE
b21haW5TdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRv
IGNvbW1pdCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxh
c3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCByZXNldFJlc3VsdCA9IG1faW5z
ZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChy
ZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWxhdGlv
bnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQsIHVuc2lnbmVk
IGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNv
bnN0Cit7CisgICAgaWYgKHN0YXRlbWVudC5iaW5kSW50KDEsIGZpcnN0RG9tYWluSUQpICE9IFNR
TElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwgc2Vjb25kRG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2lu
c2VydERvbWFpblJlbGF0aW9uc2hpcFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVz
c2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2UmPihtX2RhdGFiYXNlLmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCByZXN1bHQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gdHJ1ZSA6IGZh
bHNlOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gc3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNT
RVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXAoV2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50JiBzdGF0ZW1lbnQsIHVuc2lnbmVkIGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdG9wRnJhbWUpCit7CisgICAgaWYgKHN0YXRlbWVudC5iaW5kSW50KDEsIGRvbWFpbklEKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LmJpbmRUZXh0KDIsIHRvcEZyYW1lLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV9p
bnNlcnREb21haW5SZWxhdGlvbnNoaXBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7Cisj
ZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBzdGF0ZW1lbnQucmVzZXQoKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOwor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorCisjaWZuZGVmIE5ERUJVRworYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29uZmlybURvbWFpbkRvZXNOb3RFeGlzdChj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIGlmIChtX2RvbWFp
bklERnJvbVN0cmluZ1N0YXRlbWVudC0+YmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBT
UUxJVEVfT0spIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNv
bmZpcm1Eb21haW5Eb2VzTm90RXhpc3QgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMiLCB0aGlzLCBjb25zdF9jYXN0PFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlJj4obV9k
YXRhYmFzZS5nZXQoKSkubGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAKKyAg
ICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9X
KSB7CisgICAgICAgIGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVt
ZW50LT5yZXNldCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJl
c3VsdCA9PSBTUUxJVEVfT0spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPnJlc2V0KCk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09L
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit1bnNpZ25lZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBkb21haW5JRCA9IDA7CisKKyAg
ICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5z
dHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fZG9tYWluSURGcm9tU3RyaW5nU3Rh
dGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxlZCwgZXJyb3IgbWVzc2Fn
ZTogJXtwdWJsaWN9cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6U1FMaXRlRGF0YWJhc2Um
PihtX2RhdGFiYXNlLmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBkb21haW5JRDsKKyAgICB9CisKKyAg
ICBkb21haW5JRCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5nZXRDb2x1bW5JbnQo
MCk7CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVu
dC0+cmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9
PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiBkb21haW5JRDsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
cyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBsb2FkU3RhdGlzdGljcykK
K3sKKyAgICBhdXRvIHJlZ2lzdHJhYmxlRG9tYWluSUQgPSBkb21haW5JRChsb2FkU3RhdGlzdGlj
cy5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BGcmFtZURvbWFp
biA6IGxvYWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucykKKyAg
ICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVEb21haW5zU3RhdGVtZW50LmdldCgpLCByZWdpc3RyYWJsZURvbWFpbklELCB0b3BGcmFtZURv
bWFpbik7CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9hZFN0YXRp
c3RpY3MudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgcmVnaXN0cmFibGVE
b21haW5JRCwgdG9wRnJhbWVEb21haW4pOworICAgIAorICAgIGZvciAoY29uc3QgYXV0byYgdG9w
RnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20p
CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbS5nZXQoKSwgcmVnaXN0cmFibGVEb21haW5JRCwgdG9wRnJhbWVEb21haW4pOworICAg
IAorICAgIGZvciAoY29uc3QgYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5z
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXAobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLmdldCgpLCByZWdpc3RyYWJsZURv
bWFpbklELCB0b3BGcmFtZURvbWFpbik7CisgICAgCisgICAgZm9yIChjb25zdCBhdXRvJiB0b3BG
cmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMpCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnMuZ2V0KCksIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
KTsKKyAgICAKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9hZFN0YXRp
c3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykKKyAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgcmVnaXN0
cmFibGVEb21haW5JRCwgdG9wRnJhbWVEb21haW4pOworICAgIAorICAgIGZvciAoY29uc3QgYXV0
byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20pCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgcmVnaXN0cmFibGVEb21haW5JRCwgdG9wRnJhbWVE
b21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpw
b3B1bGF0ZUZyb21NZW1vcnlTdG9yZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUmIG1lbW9yeVN0b3JlKQoreworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywg
d2Vha01lbW9yeVN0b3JlID0gbWFrZVdlYWtQdHIobWVtb3J5U3RvcmUpXSB7CisgICAgICAgIGlm
ICghd2Vha01lbW9yeVN0b3JlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICgh
aXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IGF1dG8mIHN0
YXRpc3RpY3NNYXAgPSB3ZWFrTWVtb3J5U3RvcmUtPmRhdGEoKTsKKyAgICAgICAgZm9yIChjb25z
dCBhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwKQorICAgICAgICAgICAgaW5zZXJ0T2Jz
ZXJ2ZWREb21haW4oc3RhdGlzdGljLnZhbHVlKTsKKworICAgICAgICAvLyBNYWtlIGEgc2VwYXJh
dGUgcGFzcyBmb3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hpcHMgc28gd2UKKyAgICAgICAgLy8g
Y2FuIHJlZmVyIHRvIHRoZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVzCisgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcCkKKyAgICAgICAgICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljLnZhbHVlKTsKKworICAgICAgICBtX2Rh
dGFiYXNlLT5ydW5WYWN1dW1Db21tYW5kKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhN
RSgxOTUwODgpOiBJbXBsZW1lbnQgZm9yIERhdGFiYXNlIHZlcnNpb24uCit9CisKK3N0YXRpYyBT
dHJpbmcgZG9tYWluc1RvU3RyaW5nKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gZG9t
YWluTmFtZSA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJcIiIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW5OYW1lLnN0
cmluZygpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcIiIpOworICAgIH0KKwor
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21h
aW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWlucykKK3sKKyAgICBTUUxpdGVT
dGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VT
dHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRh
dGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFp
bnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0
YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21haW5zIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1z
ZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVs
eUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWdu
ZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVj
dGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobnVtYmVyT2ZSZWN1cnNpdmVDYWxs
cyA+PSBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjaykgeworICAg
ICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiSGl0ICV1IHJlY3Vyc2l2
ZSBjYWxscyBpbiByZWRpcmVjdCBiYWNrdHJhY2UuIFJldHVybmluZyBlYXJseS4iLCBtYXhOdW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjayk7CisgICAgICAgIHJldHVybiBu
dW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworICAgIH0KKyAgICAKKyAgICBudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzKys7CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+IG5ld2x5SWRlbnRpZmllZERvbWFpbnM7
CisgICAgU1FMaXRlU3RhdGVtZW50IGZpbmRTdWJyZXNvdXJjZXMobV9kYXRhYmFzZS5nZXQoKSwg
bWFrZVN0cmluZygiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9t
YWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNl
cnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0g
IiwgU3RyaW5nOjpudW1iZXIocHJpbWFyeURvbWFpbklEKSwgIkFORCBPYnNlcnZlZERvbWFpbnMu
aXNQcmV2YWxlbnQgPSAwIikpOworICAgIGlmIChmaW5kU3VicmVzb3VyY2VzLnByZXBhcmUoKSA9
PSBTUUxJVEVfT0spIHsKKyAgICAgICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMuc3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3RG9tYWluID0gZmluZFN1YnJlc291
cmNlcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5v
blByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3RG9tYWluKTsKKyAgICAgICAg
ICAgIGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgICAgIG5ld2x5SWRlbnRp
ZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgZmluZFRvcEZyYW1lcyhtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3RyaW5n
KCJTRUxFQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBP
YnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJv
bURvbWFpbklEIFdIRVJFIHRhcmdldERvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIocHJpbWFy
eURvbWFpbklEKSwgIkFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIikpOworICAg
IGlmIChmaW5kVG9wRnJhbWVzLnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKKyAgICAgICAgd2hp
bGUgKGZpbmRUb3BGcmFtZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGF1
dG8gbmV3RG9tYWluID0gZmluZFRvcEZyYW1lcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgICAg
ICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNl
cnQobmV3RG9tYWluKTsKKyAgICAgICAgICAgIGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQorICAg
ICAgICAgICAgICAgIG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbik7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmV3bHlJZGVudGlmaWVkRG9tYWlucy5lbXB0eSgp
KQorICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKKworICAgIGZvciAoYXV0
byBkb21haW5JRCA6IG5ld2x5SWRlbnRpZmllZERvbWFpbnMpCisgICAgICAgIG51bWJlck9mUmVj
dXJzaXZlQ2FsbHMgPSByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGly
ZWN0ZWRUb1RoaXNEb21haW4oZG9tYWluSUQsIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNl
cywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7CisKKyAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNp
dmVDYWxsczsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KK3N0YXRpYyBT
dHJpbmcgYnVpbGRMaXN0KGNvbnN0IFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvclR5cGU+JiB2
YWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byBkb21h
aW5JRCA6IHZhbHVlcykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVu
ZE51bWJlcihkb21haW5JRCk7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1By
ZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gcHJldmFsZW50RHVlVG9SZWRp
cmVjdDsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudChj
b25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksICJTRUxFQ1QgRElT
VElOQ1QgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zdWJyZXNvdXJjZURvbWFpbklEIEZS
T00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBP
YnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnRv
RG9tYWluSUQgQU5EIE9ic2VydmVkRG9tYWlucy5pc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlm
IChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsK
KyAgICAgICAgd2hpbGUgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuc3RlcCgpID09IFNR
TElURV9ST1cpCisgICAgICAgICAgICBwcmV2YWxlbnREdWVUb1JlZGlyZWN0Lmluc2VydChzdWJy
ZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgfQorCisgICAg
U1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxp
dGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCAiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5z
LmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQu
cHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAodG9wRnJhbWVSZWRpcmVj
dFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1
ZVRvUmVkaXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDApKTsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgbWFya1ByZXZhbGVudFN0YXRlbWVu
dChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksIG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21h
aW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+
OjppdGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVU
b1JlZGlyZWN0LmVuZCgpKSksICIpIikpOworICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50IGZh
aWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRh
YmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKworSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpCit7
CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0
czsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVt
ZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKSwgIlNFTEVD
VCBkb21haW5JRCwgcmVnaXN0cmFibGVEb21haW4sIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIGlzVmVyeVByZXZhbGVudCA9IDAiX3MpOworICAgIGlmIChub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgd2hpbGUgKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuc3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGtleSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7
CisgICAgICAgICAgICBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHZhbHVlKHsgUmVnaXN0cmFi
bGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhub3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCisgICAgICAg
ICAgICAgICAgLCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LmdldENvbHVtbklu
dCgyKSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpMb3cKKyAgICAgICAgICAgICAgICAsIDAsIDAsIDAsIDAgfSk7CisgICAgICAgICAgICBy
ZXN1bHRzLmFkZChrZXksIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gdmFsdWUgOiByZXN1bHRzLmtleXMoKSkgewor
ICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcih2YWx1ZSk7Cisg
ICAgfQorCisgICAgYXV0byBkb21haW5JRHNPZkludGVyZXN0ID0gYnVpbGRlci50b1N0cmluZygp
OworCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQoY29uc3RfY2FzdDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCBt
YWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21h
aW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291
cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJl
c291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOwor
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAg
IHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRl
bWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQoY29uc3RfY2Fz
dDxTUUxpdGVEYXRhYmFzZSY+KG1fZGF0YWJhc2UuZ2V0KCkpLCBtYWtlU3RyaW5nKCJTRUxFQ1Qg
c3VicmVzb3VyY2VEb21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklE
c09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYg
KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0g
U1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3Vs
dCAhPSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNDb3VudFN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9k
YXRhYmFzZS5nZXQoKSksIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBD
T1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwg
IikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50U3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsK
KyAgICAgICAgd2hpbGUgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVu
dC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQgZG9tYWluSUQg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50
U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJl
c3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMu
ZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluc0NvdW50U3RhdGVtZW50LmdldENvbHVtbkludCgxKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50KGNvbnN0X2Nhc3Q8U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKSwg
bWFrZVN0cmluZygiU0VMRUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9N
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRv
bWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlm
ICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNR
TElURV9PSykgeworICAgICAgICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVz
dWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNlcyA9
IGZpbmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIHJlc291
cmNlU3RhdGlzdGljIDogbm90VmVyeVByZXZhbGVudFJlc291cmNlcy52YWx1ZXMoKSkgeworICAg
ICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnByZXZhbGVuY2UpOworICAgICAgICBp
ZiAobmV3UHJldmFsZW5jZSAhPSByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKQorICAgICAg
ICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0ZXJhYmxl
RG9tYWluLCBuZXdQcmV2YWxlbmNlKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKK3sKKyAg
ICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICBtYXJrQXNQcmV2
YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOworICAgIHJlY2xhc3NpZnlSZXNvdXJj
ZXMoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c3lu
Y1N0b3JhZ2VJZk5lZWRlZCgpCit7CisgICAgbV9kYXRhYmFzZS0+cnVuVmFjdXVtQ29tbWFuZCgp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3Rv
cmFnZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBtX2RhdGFiYXNlLT5ydW5WYWN1dW1Db21tYW5kKCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0b3Jh
Z2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BG
cmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQsIFBh
Z2VJRCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisK
KyAgICBzd2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJGcmFtZURvbWFpbikpIHsK
KyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZToKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29r
aWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcDoKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3Vs
dDo6QWxsb3c6CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgYnJlYWs7CisgICAgfTsK
KworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFt
ZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQs
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7CisgICAgICAgIHN0b3JlLT5jYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihz
dWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBb
c3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3Jl
LT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBU
b3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlEIGZyYW1lSUQsIFBhZ2VJRCBw
YWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdl
QWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisKKyAgICBz
d2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJGcmFtZURvbWFpbikpIHsKKyAgICBj
YXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTogeworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5n
RW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3Jh
Z2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4g
dGhpcmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFj
dGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyNlbmRpZgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3Rh
dHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcDogeworI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dn
aW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFu
dCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3Qg
YmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9y
YWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c6CisgICAgICAgIC8vIERvIG5v
dGhpbmcKKyAgICAgICAgYnJlYWs7CisgICAgfTsKKworICAgIGF1dG8gdXNlcldhc1Byb21wdGVk
RWFybGllciA9IHByb21wdEVuYWJsZWQgJiYgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhy
b3VnaFByb21wdChzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICBp
ZiAocHJvbXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21wdGVkRWFybGllcikgeworI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dn
aW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gYXNrIHRo
ZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVi
bGljfXMgdW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisj
ZW5kaWYKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6UmVx
dWlyZXNVc2VyUHJvbXB0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh1c2Vy
V2FzUHJvbXB0ZWRFYXJsaWVyKSB7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAg
IFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31z
IHVuZGVyICV7cHVibGljfXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICB9
CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVtZW50U3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNl
LmdldCgpLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0aW1lc0FjY2Vz
c2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQgPSAiLCBTdHJp
bmc6Om51bWJlcihzdWJGcmFtZVN0YXR1cy5zZWNvbmQpKSk7CisgICAgaWYgKGluY3JlbWVudFN0
b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBpbmNyZW1lbnRT
dG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkp
OworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAg
ICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RG
TW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkRWFy
bGllciwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChi
b29sIHdhc0dyYW50ZWRBY2Nlc3MpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cih3YXNHcmFudGVkQWNjZXNzID8gU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3Rv
cmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNj
ZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzLCBPcGVuZXJQYWdlSUQgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4m
JiBvcGVuZXJEb21haW4pCit7CisgICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyAhPSBvcGVuZXJEb21haW4pOworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJEb21haW4pCisgICAg
ICAgIHJldHVybjsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyk7CisKKyAgICBpZiAoY29va2llVHJl
YXRtZW50Rm9yT3JpZ2luKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcykgIT0gQ29va2llVHJl
YXRtZW50UmVzdWx0OjpBbGxvdykKKyAgICAgICAgcmV0dXJuOworCisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQs
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBm
aXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVuZGVyIG9wZW5l
ciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVu
ZWQgd2luZG93LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBvcGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAg
ICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgV1RGOjpudWxsb3B0LCBvcGVuZXJQYWdl
SUQsIGZhbHNlLCBbXShib29sKSB7IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiBzdWJG
cmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURvbWFpbiwgdWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3cpIHsKKyAg
ICAgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1l
U3RhdHVzLmZpcnN0ID09IEFkZGVkUmVjb3JkOjpObyk7CisgICAgICAgIEFTU0VSVChoYXNIYWRV
c2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21haW4pKTsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50Lmdl
dCgpLCBzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICB9CisKKyAg
ICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RG
TW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1l
RG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4s
IE9wdGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIGJvb2wgdXNlcldhc1By
b21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxi
YWNrKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHN1YkZy
YW1lRG9tYWluID09IHRvcEZyYW1lRG9tYWluKSB7CisgICAgICAgIGNhbGxiYWNrKHRydWUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IFJlbW92ZSBtX3N0b3JhZ2VB
Y2Nlc3NQcm9tcHRzRW5hYmxlZCBjaGVjayBpZiBwcm9tcHRpbmcgaXMgbm8gbG9uZ2VyIGV4cGVy
aW1lbnRhbC4KKyAgICBpZiAodXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyICYmIG1fc3RvcmFn
ZUFjY2Vzc1Byb21wdHNFbmFibGVkKSB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBhdXRvIHN1
YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oc3ViRnJhbWVEb21haW4pOworICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3Qg
PT0gQWRkZWRSZWNvcmQ6Ok5vKTsKKyAgICAgICAgQVNTRVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlv
bihzdWJGcmFtZURvbWFpbikpOworICAgICAgICBBU1NFUlQoaGFzVXNlckdyYW50ZWRTdG9yYWdl
QWNjZXNzVGhyb3VnaFByb21wdChzdWJGcmFtZVN0YXR1cy5zZWNvbmQsIHRvcEZyYW1lRG9tYWlu
KSk7CisjZW5kaWYKKyAgICAgICAgc2V0VXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluLCB0
cnVlLCBXYWxsVGltZTo6bm93KCkpOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9w
RnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFn
ZUlELCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFu
ZGxlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHN0b3JlID0gc3RvcmUuY29weVJlZigpXShib29s
IHZhbHVlKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgdmFsdWVdICgpIG11dGFibGUg
eworICAgICAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKyAgICB9KTsKKworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+JiBkb21haW5zKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZS5nZXQoKSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2Vy
dmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
SU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNU
b1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFp
bnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMg
ZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFz
dEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKK3sK
KyAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHBy
aW1hcnlEb21haW5zVG9CbG9jay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4obV9kZWJ1Z1N0YXRpY1By
ZXZhbGVudFJlc291cmNlKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShtX2RlYnVnU3RhdGlj
UHJldmFsZW50UmVzb3VyY2UsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgIHBy
aW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z1N0YXRpY1ByZXZhbGVu
dFJlc291cmNlKTsKKworICAgIGlmICghbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLmlz
RW1wdHkoKSkgeworICAgICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICBzZXRQcmV2
YWxlbnRSZXNvdXJjZShtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UsIFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OkhpZ2gpOworICAgICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVj
a2VkQXBwZW5kKG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnLCAiRGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCByZXNvdXJjZSBmb3Ig
dGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIG1fZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgIH0KKworICAgIHJl
dHVybiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVj
dCwgYm9vbCBpc01haW5GcmFtZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGJvb2wgYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgPSB0YXJnZXRE
b21haW4gPT0gdG9wRnJhbWVEb21haW47CisgICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VEb21h
aW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gc291cmNlRG9tYWluOworCisgICAgYm9vbCBz
dGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzTWFpbkZyYW1lICYmICEo
YXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291cmNl
RG9tYWluc1NhbWVTaXRlKSkgeworICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAg
ICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6
cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKSk7CisKKyAgICAgICAgaWYgKCFy
ZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMuZ2V0
KCksIHRhcmdldFJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSkgeworICAgICAgICAgICAg
aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucy5n
ZXQoKSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgICAgICAgICAg
c3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChpc1JlZGlyZWN0ICYmICFhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUpIHsKKyAg
ICAgICAgaWYgKGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9t
YWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
c291cmNlRG9tYWluKTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cy5nZXQoKSwgcmVkaXJlY3RpbmdEb21haW5SZXN1
bHQuc2Vjb25kLCB0YXJnZXREb21haW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgcmVkaXJlY3Rp
bmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pOworICAgICAgICAgICAgICAgIHN0
YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhp
c3RzKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzLmdldCgpLCB0YXJnZXRSZXN1
bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmdldCgpLCB0YXJnZXRS
ZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NX
ZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9tYWluKTsKKyAgICAgICAgICAgIGlm
ICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0
cy5nZXQoKSwgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pKSB7
CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUby5nZXQoKSwgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0
YXJnZXREb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRy
dWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsK
KyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNGcm9tRXhpc3RzLmdldCgpLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21h
aW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmdldCgpLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3Vy
Y2VEb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGlzdGljc1dl
cmVVcGRhdGVkKQorICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElm
TmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxh
c3RTZWVuKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBy
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJn
ZXREb21haW4pOworICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgbGFzdFNlZW4pOwor
CisgICAgYXV0byB0YXJnZXREb21haW5JRCA9IHJlc3VsdC5zZWNvbmQ7CisgICAgaWYgKCFyZWxh
dGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMuZ2V0
KCksIHRhcmdldERvbWFpbklELCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9t
YWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5nZXQoKSwg
dGFyZ2V0RG9tYWluSUQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOworICAgIH0KK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChj
b25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYgc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdGVk
VG9Eb21haW4mIHRhcmdldERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gc291cmNlRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9tYWluKTsKKyAgICBhdXRvIHRhcmdldERv
bWFpblJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHRhcmdldERvbWFpbik7CisKKyAgICBib29sIGlzTmV3UmVkaXJlY3RUb0VudHJ5ID0gZmFsc2U7
CisgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvRXhpc3RzLmdldCgpLCBzb3VyY2VEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4p
KSB7CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8uZ2V0KCksIHNvdXJjZURvbWFpblJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFp
bik7CisgICAgICAgIGlzTmV3UmVkaXJlY3RUb0VudHJ5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBi
b29sIGlzTmV3UmVkaXJlY3RGcm9tRW50cnkgPSBmYWxzZTsKKyAgICBpZiAoIXJlbGF0aW9uc2hp
cEV4aXN0cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cy5nZXQoKSwgdGFy
Z2V0RG9tYWluUmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKSkgeworICAgICAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZ2V0KCks
IHRhcmdldERvbWFpblJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbik7CisgICAgICAgIGlzTmV3
UmVkaXJlY3RGcm9tRW50cnkgPSB0cnVlOworICAgIH0KKworICAgIGlmIChpc05ld1JlZGlyZWN0
VG9FbnRyeSB8fCBpc05ld1JlZGlyZWN0RnJvbUVudHJ5KQorICAgICAgICBzY2hlZHVsZVN0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUg
bW9zdFJlY2VudEludGVyYWN0aW9uKQoreworICAgIGlmIChtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQtPmJpbmRJbnQoMSwgaGFkVXNlckludGVyYWN0aW9uKQorICAgICAgICB8
fCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQtPmJpbmREb3VibGUoMiwgbW9z
dFJlY2VudEludGVyYWN0aW9uLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+Ymlu
ZFRleHQoMywgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9tb3N0
UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFj
dGlvbiwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGludCByZXNldFJlc3VsdCA9IG1fbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0
UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJh
bWVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7
CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgdHJ1ZSwgV2FsbFRpbWU6Om5vdygpKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBzZXRV
c2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKKworICAgIFNRTGl0ZVN0YXRlbWVu
dCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VTdHJpbmcoIkRFTEVU
RSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9
ICIsIFN0cmluZzo6bnVtYmVyKHRhcmdldFJlc3VsdC5zZWNvbmQpKSk7CisgICAgaWYgKHJlbW92
ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCByZW1vdmVT
dG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30K
KworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31z
IiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOworI2VuZGlmCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Ym9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC0+
Z2V0Q29sdW1uSW50KDApID8gdHJ1ZSA6IGZhbHNlOworICAgIGlmICghaGFkVXNlckludGVyYWN0
aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2FsbFRpbWUgbW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMobV9oYWRVc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQtPmdldENvbHVtbkRvdWJsZSgxKSk7CisKKyAgICBpZiAoaGFz
U3RhdGlzdGljc0V4cGlyZWQobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpKSB7CisgICAg
ICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRpdmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBu
ZWVkIGl0LgorICAgICAgICAvLyBTZXQgdGltZXN0YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNz
IG1lcmdlIHdpbGwga25vdworICAgICAgICAvLyBpdCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2Vk
IHRvIGl0cyBkZWZhdWx0IC0xLgorICAgICAgICBjbGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4p
OworICAgICAgICBoYWRVc2VySW50ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGhhZFVzZXJJbnRlcmFjdGlvbjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fdXBkYXRlUHJldmFs
ZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFp
bi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV91
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+cmVzZXQoKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworCisgICAgaWYgKG5l
d1ByZXZhbGVuY2UgPT0gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gpIHsKKyAgICAg
ICAgaWYgKG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LT5iaW5kSW50KDEs
IDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09L
CisgICAgICAgICAgICB8fCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6bV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNl
LT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaW50IHJlc2V0
UmVzdWx0ID0gbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnJlc2V0KCk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElU
RV9PSyk7CisgICAgfQorCisgICAgU3RkU2V0PHVuc2lnbmVkPiBub25QcmV2YWxlbnRSZWRpcmVj
dGlvblNvdXJjZXM7CisgICAgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRS
ZWRpcmVjdGVkVG9UaGlzRG9tYWluKGRvbWFpbklEKGRvbWFpbiksIG5vblByZXZhbGVudFJlZGly
ZWN0aW9uU291cmNlcywgMCk7CisgICAgc2V0RG9tYWluc0FzUHJldmFsZW50KFdURk1vdmUobm9u
UHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWdu
ZWQ+JiYgZG9tYWlucykKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3Rh
dGVtZW50KG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdU
Rjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlucy5iZWdp
bigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBt
ZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9yTXNnKCkpOwor
I2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCitTdHJpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmR1
bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FKDE5NTA4OCk6IEltcGxlbWVudCBTUUxpdGUtYmFz
ZWQgZHVtcGluZyByb3V0aW5lcy4KKyAgICBBU1NFUlQoMCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFs
dWVGb3JEb21haW4oV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBwcmVkaWNhdGVTdGF0ZW1lbnQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgaWYgKHByZWRpY2F0ZVN0YXRlbWVudC5iaW5k
VGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBwcmVkaWNh
dGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiBmYWlsZWQgdG8g
YmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29y
ZTo6U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKS5sYXN0RXJyb3JNc2coKSk7Cisj
ZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9IHByZWRpY2F0ZVN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7CisgICAgaW50IHJlc2V0UmVzdWx0ID0gcHJlZGljYXRl
U3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRS
ZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVGb3JEb21haW4obV9pc1By
ZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmdldCgpLCBkb21haW4pOworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1f
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuZ2V0KCksIGRvbWFpbik7Cit9CisKK2Jv
b2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3Vi
cmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4s
IGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlzdHMo
bV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMuZ2V0KCksIGRvbWFpbklEKHN1
YnJlc291cmNlRG9tYWluKSwgdG9wRnJhbWVEb21haW4pOworfQorCitib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29u
c3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluRXhpc3RzLmdldCgpLCBkb21haW5JRChzdWJGcmFtZURvbWFpbiksIHRvcEZyYW1lRG9t
YWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRp
cmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9E
b21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBy
ZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4
aXN0cy5nZXQoKSwgZG9tYWluSUQocmVkaXJlY3RlZEZyb21Eb21haW4pLCByZWRpcmVjdGVkVG9E
b21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIAorICAgIGlmIChtX2Ns
ZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlLCBlcnJvciBtZXNzYWdlOiAl
e3B1YmxpY31zIiwgdGhpcywgY29uc3RfY2FzdDxXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSY+KG1f
ZGF0YWJhc2UuZ2V0KCkpLmxhc3RFcnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVz
ZXRSZXN1bHQgPSBtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQtPnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRm
YXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICAKKyAgICBpZiAobV91cGRh
dGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LT5iaW5kSW50KDEsIHZhbHVlKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LT5iaW5kVGV4dCgxLCBk
b21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZUdyYW5kZmF0
aGVyZWRTdGF0ZW1lbnQtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIGNvbnN0X2Nhc3Q8V2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2UmPihtX2RhdGFiYXNlLmdldCgpKS5sYXN0RXJyb3JNc2coKSk7CisjZW5k
aWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVt
ZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0
ID09IFNRTElURV9PSyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBj
b25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHBy
ZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50LmdldCgpLCBk
b21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZy
YW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKwor
ICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3Rp
Y3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuZ2V0KCks
IHJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJh
bWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVu
Y3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9w
IGZyYW1lIGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAo
bV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLmdldCgpLCByZXN1bHQuc2Vjb25kLCB0
b3BGcmFtZURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURv
bWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERv
bWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVz
b3VyY2VEb21haW4pOworCisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxz
byBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFp
bik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvLmdldCgpLCByZXN1bHQuc2Vjb25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAv
LyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVu
dHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5nZXQoKSwgcmVz
dWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9w
RnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJl
Y3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRv
cEZyYW1lRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFs
c28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAg
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21h
aW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUby5nZXQoKSwgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOworCisgICAgLy8gRm9yIGNvbnNpc3Rl
bmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJl
ZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAo
bV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZ2V0KCksIHJlc3VsdC5zZWNvbmQsIHJlZGly
ZWN0RG9tYWluKTsKK30KKworc3RkOjpwYWlyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpBZGRlZFJlY29yZCwgdW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LT5iaW5k
VGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSykgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3JlYXRlU2NoZW1hIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RFcnJvck1zZygpKTsKKyNl
bmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgQWRk
ZWRSZWNvcmQ6Ok5vLCAwIH07CisgICAgfQorICAgIAorICAgIGlmIChtX2RvbWFpbklERnJvbVN0
cmluZ1N0YXRlbWVudC0+c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgdW5zaWduZWQg
ZG9tYWluSUQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC0+Z2V0Q29sdW1uSW50KDAp
OworCisgICAgICAgIGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVt
ZW50LT5yZXNldCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJl
c3VsdCA9PSBTUUxJVEVfT0spOworICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIGRv
bWFpbklEIH07CisgICAgfQorCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21T
dHJpbmdTdGF0ZW1lbnQtPnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwg
cmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
bmV3T2JzZXJ2YXRpb24oZG9tYWluKTsKKyAgICBpbnNlcnRPYnNlcnZlZERvbWFpbihuZXdPYnNl
cnZhdGlvbik7CisKKyAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6WWVzLCBkb21haW5JRChkb21h
aW4pIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcmVzb3VyY2VTdGF0aXN0aWNz
TWFwLmNsZWFyKCk7CisgICAgbV9vcGVyYXRpbmdEYXRlcy5jbGVhcigpOworCisgICAgYXV0byBj
YWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CisKKyAgICByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSB7IH0pOworCisgICAg
YXV0byBwcmltYXJ5RG9tYWluc1RvQmxvY2sgPSBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JE
ZWJ1Z01vZGUoKTsKKyAgICB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMocHJpbWFyeURv
bWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNv
cHlSZWYoKV0geyB9KTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OkNvb2tpZVRyZWF0bWVudFJlc3VsdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y29va2llVHJlYXRtZW50Rm9yT3JpZ2luKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21h
aW4pIGNvbnN0Cit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChjb25zdF9jYXN0PFNR
TGl0ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksIG1ha2VTdHJpbmcoIlNFTEVDVCBpc1By
ZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJl
Z2lzdHJhYmxlRG9tYWluID0gIiwgZG9tYWluLnN0cmluZygpKSk7CisgICAgaWYgKHN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgICAgICByZXR1cm4gQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxv
dzsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ByZXZhbGVudCA9IHN0YXRlbWVudC5nZXRDb2x1
bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7CisgICAgaWYgKCFpc1ByZXZhbGVudCkKKyAgICAgICAg
cmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c7CisKKyAgICBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbiA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7Cisg
ICAgcmV0dXJuIGhhZFVzZXJJbnRlcmFjdGlvbiA/IENvb2tpZVRyZWF0bWVudFJlc3VsdDo6Qmxv
Y2tBbmRLZWVwIDogQ29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOworfQorICAg
IAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50
ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCh1bnNpZ25lZCByZXF1ZXN0aW5nRG9tYWluSUQs
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9tYWluKSBjb25zdAoreworICAg
IGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9IGRvbWFpbklEKGZpcnN0UGFydHlEb21h
aW4pOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURh
dGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksIG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgqKSBG
Uk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ICIs
IFN0cmluZzo6bnVtYmVyKHJlcXVlc3RpbmdEb21haW5JRCksICIgQU5EIHRvcExldmVsRG9tYWlu
SUQgPSAiLCBTdHJpbmc6Om51bWJlcihmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEKSkpOworICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ST1cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gZmFsc2UgOiB0cnVlOworfQorCitWZWN0
b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpkb21haW5zVG9CbG9jaygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlc3VsdHM7CisgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0ZURhdGFiYXNlJj4obV9kYXRhYmFz
ZS5nZXQoKSksICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChz
dGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJl
Z2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJp
bmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKworICAgIHJldHVybiByZXN1bHRzOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVDb29r
aWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIGRvbWFpbnNU
b0Jsb2NrID0gdGhpcy0+ZG9tYWluc1RvQmxvY2soKTsKKworICAgIGlmIChkb21haW5zVG9CbG9j
ay5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgJiYgIWRvbWFpbnNU
b0Jsb2NrLmlzRW1wdHkoKSkKKyAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9j
ayIsIGRvbWFpbnNUb0Jsb2NrKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vh
a1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9t
YWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5k
bGVyKGRvbWFpbnNUb0Jsb2NrLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUg
PSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVl
KCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xv
Z2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVwZGF0aW5n
IGNvb2tpZSBibG9ja2luZy4iKTsKKyNlbmRpZgorICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkKKyAgICAgICAgcHJvY2Vzc0Z1bmN0aW9u
KHJlc291cmNlU3RhdGlzdGljKTsKK30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpQcmV2YWxlbnREb21haW5EYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cHJldmFsZW50RG9tYWlucygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRhdGE+
IHJlc3VsdHM7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChjb25zdF9jYXN0PFNRTGl0
ZURhdGFiYXNlJj4obV9kYXRhYmFzZS5nZXQoKSksICJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJh
YmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNlckludGVyYWN0
aW9uLCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50
ID0gMSJfcyk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAg
ICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAKKyAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAsIFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAsIFdhbGxUaW1lOjpmcm9tUmF3
U2Vjb25kcyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDIpKQorICAgICAgICAgICAgLCBzdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRl
bWVudC5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKKyAgICAgICAgfSk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCitWZWN0b3I8dW5zaWduZWQ+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMo
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9y
PHVuc2lnbmVkPiByZXN1bHRzOworICAgIE9wdGlvbmFsPFNlY29uZHM+IGV4cGlyYXRpb25EYXRl
VGltZSA9IHN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCk7CisgICAgaWYgKCFleHBpcmF0aW9uRGF0
ZVRpbWUpCisgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgYXV0byYgc3RhdGVtZW50ID0g
Y29uc3RfY2FzdDxTUUxpdGVTdGF0ZW1lbnQmPihtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9u
U3RhdGVtZW50LmdldCgpKTsKKyAgICBpZiAoc3RhdGVtZW50LmJpbmREb3VibGUoMSwgZXhwaXJh
dGlvbkRhdGVUaW1lLnZhbHVlKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1
cm4gcmVzdWx0czsKKworICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cp
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAg
IAorICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZXhwaXJlZFJlY29yZHMgPSBmaW5k
RXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICBpZiAoZXhwaXJlZFJlY29yZHMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGV4cGlyZWRSZWNvcmRJRHMgPSBidWls
ZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9yPihleHBp
cmVkUmVjb3Jkcy5iZWdpbigpLCBleHBpcmVkUmVjb3Jkcy5lbmQoKSkpOworCisgICAgU1FMaXRl
U3RhdGVtZW50IGNsZWFyRXhwaXJlZEludGVyYWN0aW9uKG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VT
dHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rp
b25UaW1lID0gMCwgaGFkVXNlckludGVyYWN0aW9uID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwg
ZXhwaXJlZFJlY29yZElEcywgIikiKSk7CisgICAgaWYgKGNsZWFyRXhwaXJlZEludGVyYWN0aW9u
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVN0
YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UuZ2V0KCksIG1ha2VTdHJpbmco
IkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAiLCBleHBpcmVk
UmVjb3JkSURzLCAiKSIpKTsKKyAgICBpZiAocmVtb3ZlU3RvcmFnZUFjY2Vzcy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2xlYXJFeHBpcmVkSW50
ZXJhY3Rpb24uc3RlcCgpICE9IFNRTElURV9ET05FCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VB
Y2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7
CisjZW5kaWYKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5n
KFZlY3Rvcjx1bnNpZ25lZD4mJiBkb21haW5JRHNUb0NsZWFyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbklEc1RvQ2xlYXIuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxpc3RUb0NsZWFyID0gYnVpbGRMaXN0KFdURjo6
SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWluSURzVG9DbGVh
ci5iZWdpbigpLCBkb21haW5JRHNUb0NsZWFyLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudChtX2RhdGFiYXNlLmdldCgpLCBtYWtlU3Ry
aW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBk
b21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmIChjbGVhckdyYW5kZmF0
aGVyaW5nU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJS
T1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJsZURvbWFp
bnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IG1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA+IFdhbGxUaW1lOjpub3coKTsKKyAgICBib29sIHNob3Vs
ZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiBt
X2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CisKKyAgICBpZiAoc2hvdWxkQ2xlYXJHcmFu
ZGZhdGhlcmluZykKKyAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0geyB9
OworCisgICAgY2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9ucygpOworICAgIAorICAgIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gcHJldmFsZW50UmVzb3VyY2VzOworCisgICAgVmVjdG9yPFBy
ZXZhbGVudERvbWFpbkRhdGE+IHByZXZhbGVudERvbWFpbnMgPSB0aGlzLT5wcmV2YWxlbnREb21h
aW5zKCk7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJp
bmc7CisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBwcmV2YWxlbnREb21haW5zKSB7CisgICAg
ICAgIGlmICghc3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbiAmJiAoIXNob3VsZENoZWNrRm9y
R3JhbmRmYXRoZXJpbmcgfHwgIXN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKSkKKyAgICAgICAgICAg
IHByZXZhbGVudFJlc291cmNlcy5hcHBlbmQoc3RhdGlzdGljLnJlZ2lzdGVyYWJsZURvbWFpbik7
CisKKyAgICAgICAgaWYgKHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgJiYgc3RhdGlzdGljLmdy
YW5kZmF0aGVyZWQpCisgICAgICAgICAgICBkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmcu
YXBwZW5kKHN0YXRpc3RpYy5kb21haW5JRCk7CisgICAgfQorCisgICAgY2xlYXJHcmFuZGZhdGhl
cmluZyhXVEZNb3ZlKGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZykpOworICAgIAorICAg
IHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICBh
dXRvJiBzdGF0ZW1lbnQgPSBjb25zdF9jYXN0PFNRTGl0ZVN0YXRlbWVudCY+KG1fb2JzZXJ2ZWRE
b21haW5Db3VudC5nZXQoKSk7CisgICAgaWYgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JP
VykKKyAgICAgICAgY291bnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50
IHJlc2V0UmVzdWx0ID0gc3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNl
dFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIGlmIChjb3VudCA8PSBt
X3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IEFTU0VSVChtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvIDw9IG1fcGFyYW1ldGVycy5t
YXhTdGF0aXN0aWNzRW50cmllcyk7CisKKyAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVuZSA9IGNv
dW50IC0gbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbzsKKyAgICBBU1NFUlQoY291bnRM
ZWZ0VG9QcnVuZSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3Jkc1RvUHJ1bmUobV9kYXRh
YmFzZS5nZXQoKSwgbWFrZVN0cmluZygiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21h
aW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIERF
U0MgTElNSVQgIiwgU3RyaW5nOjpudW1iZXIoY291bnRMZWZ0VG9QcnVuZSkpKTsKKyAgICBpZiAo
cmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS0+bGFzdEVycm9y
TXNnKCkpOworI2VuZGlmCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKKyAg
ICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGVu
dHJpZXNUb1BydW5lLmFwcGVuZChyZWNvcmRzVG9QcnVuZS5nZXRDb2x1bW5JbnQoMCkpOworCisg
ICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9y
PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGVudHJpZXNUb1BydW5lLmJlZ2luKCksIGVudHJpZXNUb1By
dW5lLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcHJ1bmVDb21tYW5kKG1fZGF0YWJh
c2UuZ2V0KCksIG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBk
b21haW5JRCBJTiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOworICAgIGlmIChwcnVuZUNvbW1hbmQu
cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBwcnVuZUNvbW1hbmQuc3RlcCgpICE9
IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLT5sYXN0RXJyb3JNc2coKSk7CisjZW5kaWYKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fdXBkYXRlTGFzdFNlZW5TdGF0
ZW1lbnQtPmJpbmREb3VibGUoMSwgbGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC0+Ymlu
ZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRh
dGVMYXN0U2VlblN0YXRlbWVudC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2VlbiBmYWlsZWQgdG8g
YmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UtPmxhc3RF
cnJvck1zZygpKTsKKyNlbmRpZgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZUxh
c3RTZWVuU3RhdGVtZW50LT5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQs
IHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRv
bWFpbik7CisgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWluLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29u
ZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAg
c2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdo
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVy
eVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIHNldFByZXZhbGVudFJlc291
cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlNTViNGI1ZTc5MGY5NmQy
MmU2ZTc4OWQ0ZjE4NjE2NDYwMzZkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuaApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2luY2x1ZGUgIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworY2xhc3MgU1FMaXRlU3RhdGVtZW50Oworc3Ry
dWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CisKKy8vIFRoaXMgaXMgYWx3
YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KK2NsYXNzIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1ZXVlJiwgY29uc3QgU3RyaW5nJiBz
dG9yYWdlRGlyZWN0b3J5UGF0aCk7CisKKyAgICB2b2lkIHBvcHVsYXRlRnJvbU1lbW9yeVN0b3Jl
KGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYpOworCisgICAgdm9pZCBj
bGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhjb25z
dCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsK
KworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICB2
b2lkIHN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVxdWVz
dFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwg
T3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGdyYW5k
ZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKSBv
dmVycmlkZTsKKworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBj
b25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgY2xl
YXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOwor
ICAgIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFByZXZhbGVudFJl
c291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsK
KworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJv
b2wgdmFsdWUpIG92ZXJyaWRlOworICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9t
YWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShj
b25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNj
ZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwg
Ym9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NT
dGF0dXMpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFt
ZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgdXNlcldh
c1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsK
KworICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBp
c1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1VzZXJJ
bnRlcmFjdGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgbG9n
U3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJh
bWVEb21haW4mLCBXYWxsVGltZSBsYXN0U2Vlbikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dTdWJy
ZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJl
Y3RlZFRvRG9tYWluJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9u
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNIYWRVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKworICAgIHZv
aWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBib29sIGluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291
cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICB2b2lkIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIGJvb2wgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYsIHVuc2lnbmVkIGRvbWFpbklELCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pOworICAgIGJvb2wgcmVsYXRp
b25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYsIHVuc2lnbmVkIGZpcnN0RG9t
YWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4pIGNvbnN0OworICAg
IHVuc2lnbmVkIGRvbWFpbklEKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisjaWZu
ZGVmIE5ERUJVRworICAgIGJvb2wgY29uZmlybURvbWFpbkRvZXNOb3RFeGlzdChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0OworI2VuZGlmCisgICAgdm9pZCB1cGRhdGVMYXN0U2Vlbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFdhbGxUaW1lKTsKKyAgICB2b2lkIHNldFVzZXJJbnRl
cmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgaGFkVXNlckludGVyYWN0aW9u
LCBXYWxsVGltZSk7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBkb21haW5zVG9CbG9j
aygpIGNvbnN0OworCisgICAgc3RydWN0IFByZXZhbGVudERvbWFpbkRhdGEgeworICAgICAgICB1
bnNpZ25lZCBkb21haW5JRDsKKyAgICAgICAgUmVnaXN0cmFibGVEb21haW4gcmVnaXN0ZXJhYmxl
RG9tYWluOworICAgICAgICBXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZTsK
KyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb247CisgICAgICAgIGJvb2wgZ3JhbmRmYXRo
ZXJlZDsKKyAgICB9OworICAgIFZlY3RvcjxQcmV2YWxlbnREb21haW5EYXRhPiBwcmV2YWxlbnRE
b21haW5zKCkgY29uc3Q7CisgICAgVmVjdG9yPHVuc2lnbmVkPiBmaW5kRXhwaXJlZFVzZXJJbnRl
cmFjdGlvbnMoKSBjb25zdDsKKyAgICB2b2lkIGNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMo
KTsKKyAgICB2b2lkIGNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYmKTsKKyAg
ICBib29sIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQodW5zaWduZWQg
ZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBpbmNy
ZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9t
YWluPiYmKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVjbGFzc2lmeVJlc291cmNlcygpOworICAg
IHN0cnVjdCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzIHsKKyAgICAgICAgUmVnaXN0cmFibGVE
b21haW4gcmVnaXN0ZXJhYmxlRG9tYWluOworICAgICAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
IHByZXZhbGVuY2U7CisgICAgICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnNDb3VudDsKKyAgICAgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
b0NvdW50OworICAgICAgICB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnQ7CisgICAgICAgIHVuc2lnbmVkIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKKyAg
ICB9OworICAgIEhhc2hNYXA8dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IGZp
bmROb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzKCk7CisKKyAgICBib29sIHByZWRpY2F0ZVZhbHVl
Rm9yRG9tYWluKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7CisKKyAgICBlbnVtIGNsYXNzIENvb2tpZVRyZWF0bWVudFJlc3VsdCB7IEFs
bG93LCBCbG9ja0FuZEtlZXAsIEJsb2NrQW5kUHVyZ2UgfTsKKyAgICBDb29raWVUcmVhdG1lbnRS
ZXN1bHQgY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
Y29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOworICAgIHVuc2lnbmVkIHJlY3Vy
c2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbih1
bnNpZ25lZCBwcmltYXJ5RG9tYWluSUQsIFN0ZFNldDx1bnNpZ25lZD4mIG5vblByZXZhbGVudFJl
ZGlyZWN0aW9uU291cmNlcywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7CisgICAg
dm9pZCBzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmKTsKKyAgICB2b2lk
IGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9t
YWluJiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIG1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKSBv
dmVycmlkZTsKKyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpIG92ZXJyaWRlOwor
ICAgIGVudW0gY2xhc3MgQWRkZWRSZWNvcmQgeyBObywgWWVzIH07CisgICAgc3RkOjpwYWlyPEFk
ZGVkUmVjb3JkLCB1bnNpZ25lZD4gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFi
bGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKSBvdmVy
cmlkZTsKKworICAgIGJvb2wgY3JlYXRlU2NoZW1hKCk7CisgICAgYm9vbCBwcmVwYXJlU3RhdGVt
ZW50cygpOworICAgIAorICAgIGNvbnN0IFN0cmluZyBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoOwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBtX3Jl
c291cmNlU3RhdGlzdGljc01hcDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlRGF0YWJh
c2U+IG1fZGF0YWJhc2U7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4g
bV9vYnNlcnZlZERvbWFpbkNvdW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0YXRlbWVudDsK
KyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fZG9tYWlu
SURGcm9tU3RyaW5nU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50OworICAg
IFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUbzsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+
IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAgICBVbmlxdWVSZWY8V2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50PiBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbTsKKyAgICBt
dXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tRXhpc3RzOworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluczsKKyAgICBtdXRhYmxlIFVuaXF1
ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluRXhpc3RzOworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluczsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhp
c3RzOworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQ+IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAgICBV
bmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbTsKKyAgICBtdXRhYmxlIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzOworICAgIFVuaXF1ZVJl
ZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0
YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0
ZUxhc3RTZWVuU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQ+IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBVbmlx
dWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVW
ZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBVbmlxdWVSZWY8V2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50
OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fY2xlYXJQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBVbmlxdWVSZWY8V2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50PiBtX3VwZGF0ZUhhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFVu
aXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1faGFkVXNlckludGVyYWN0aW9uU3Rh
dGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQ+IG1fdXBkYXRl
TW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWVTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50Owor
ICAgIG11dGFibGUgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV9pc0dyYW5k
ZmF0aGVyZWRTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dD4gbV91cGRhdGVEYXRhUmVjb3Jkc1JlbW92ZWRTdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdl
YkNvcmU6OlNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5
RHVlVG9Vc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7CisgICAgVW5pcXVlUmVmPFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudD4gbV91cGRhdGVUaW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJU3RhdGVtZW50OworICAgIFVuaXF1ZVJlZjxXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQ+IG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCmluZGV4IDE3Y2E1N2Y4ZjE0ZGFmYjc4YmE4YmNh
ZjBiMTJjYTkzZGI4NTAzYTguLmM1MWEyYjQ1NTkwZWNkYjI5Y2U5M2I1NGNjYjgzODQ1NDhmMmJl
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUuY3BwCkBAIC00OSw5NCArNDksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBjb25zdGV4cHIgdW5zaWduZWQgc3RhdGlzdGljc01vZGVsVmVyc2lv
biB7IDE1IH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0lu
UmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OwotY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRp
c3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBvcGVy
YXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5j
ZSB7IDMgfTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotc3RhdGljIFN0cmluZyBkb21h
aW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKLXsK
LSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21h
aW5zKSB7Ci0gICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbi5z
dHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0jZW5k
aWYKLQotY2xhc3MgT3BlcmF0aW5nRGF0ZSB7Ci1wdWJsaWM6Ci0gICAgT3BlcmF0aW5nRGF0ZSgp
ID0gZGVmYXVsdDsKLQotICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZyb21XYWxsVGltZShXYWxs
VGltZSB0aW1lKQotICAgIHsKLSAgICAgICAgZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2luY2VF
cG9jaCgpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsK
LSAgICAgICAgaW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIHllYXIpOwotICAgICAgICBpbnQg
bW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7Ci0g
ICAgICAgIGludCBtb250aERheSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlz
TGVhcFllYXIoeWVhcikpOwotCi0gICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlIHsgeWVhciwg
bW9udGgsIG1vbnRoRGF5IH07Ci0gICAgfQotCi0gICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgdG9k
YXkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShX
YWxsVGltZTo6bm93KCkpOwotICAgIH0KLQotICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2go
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9EYXlzRnJvbTE5
NzAobV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkgfTsKLSAgICB9
Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5ICYm
IG1fbW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOwotICAg
IH0KLQotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNv
bmRzU2luY2VFcG9jaCgpOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVy
YXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZWNvbmRzU2lu
Y2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5KQot
ICAgICAgICA6IG1feWVhcih5ZWFyKQotICAgICAgICAsIG1fbW9udGgobW9udGgpCi0gICAgICAg
ICwgbV9tb250aERheShtb250aERheSkKLSAgICB7IH0KLQotICAgIGludCBtX3llYXIgeyAwIH07
Ci0gICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCi0gICAgaW50IG1fbW9udGhEYXkg
eyAwIH07IC8vIFsxLCAzMV0uCi19OwotCi1zdGF0aWMgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1l
cmdlT3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBleGlzdGluZ0Rh
dGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykKLXsKLSAgICBpZiAoZXhpc3Rp
bmdEYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKG5ld0RhdGVzKTsKLQot
ICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUo
KSArIG5ld0RhdGVzLnNpemUoKSk7Ci0KLSAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0
b3JzIG9mIGRhdGVzLgotICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBleGlz
dGluZ0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2Vk
RGF0ZXMuYmVnaW4oKSk7Ci0gICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KLSAgICByZW1v
dmVSZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKLQotICAgIC8vIERyb3Agb2xkIGRhdGVz
IHVudGlsIHRoZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGluZ0RhdGVzV2luZG93LgotICAg
IHdoaWxlIChtZXJnZWREYXRlcy5zaXplKCkgPiBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLSAgICAg
ICAgbWVyZ2VkRGF0ZXMucmVtb3ZlKDApOwotCi0gICAgcmV0dXJuIG1lcmdlZERhdGVzOwotfQog
CiBzdHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKICAgICBSZWdpc3RyYWJsZURvbWFpbiBkb21h
aW47CkBAIC0xNTUsMjYgKzY3LDE0IEBAIHN0YXRpYyB2b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hN
YXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzCiAgICAgICAg
IHN0YXRpc3RpY3NNYXAucmVtb3ZlKHN0YXRpc3RpY3NUb1BydW5lW2ldLmRvbWFpbik7CiB9CiAK
LXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICB1bnNpZ25lZCBpbXBvcnRhbmNlID0g
bWF4SW1wb3J0YW5jZTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVz
b3VyY2UpCi0gICAgICAgIGltcG9ydGFuY2UgLT0gMTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlz
dGljLmhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgaW1wb3J0YW5jZSAtPSAyOwotICAgIHJl
dHVybiBpbXBvcnRhbmNlOwotfQotCiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkKLSAgICA6IG1fc3RvcmUoc3Rv
cmUpCi0gICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAgOiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRz
SWZOZWVkZWQoKTsKICNlbmRpZgotICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVj
ZXNzYXJ5KCk7CiAKICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewogICAgICAgICBpZiAod2Vha1RoaXMpCkBAIC0xODIs
OSArODIsOSBAQCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZQogICAgIH0pOwogfQogCi1SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUoKQorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzRW1wdHko
KSBjb25zdAogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIHJldHVybiBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UmIHBlcnNpc3RlbnRTdG9yYWdlKQpAQCAtMjAwLDc1
ICsxMDAsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNhbGN1
bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0CiAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7CiB9CiAKLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgbV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1l
dHJ5ID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2sp
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21h
aW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgewotICAgICAgICBj
YWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBF
X1BMVUdJTl9BUEkpCi0gICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIoKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5w
bHVnaW5Qcm9jZXNzZXMoKSkKLSAgICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuYWRkKHBsdWdp
bi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOwotI2VuZGlmCi0KLSAgICBhdXRvIHByZXZhbGVudFJl
c291cmNlRG9tYWlucyA9IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3Io
KTsKLSAgICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgewotICAgICAg
ICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBk
b21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgeworICAgICAgICBhdXRvJiBzdGF0aXN0aWMg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwor
ICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiAgICAgfQotCi0jaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2lu
Z0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJlbW92ZSBk
YXRhIHJlY29yZHMgZm9yICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZhbGVudFJl
c291cmNlRG9tYWlucykudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIHNldERhdGFSZWNv
cmRzQmVpbmdSZW1vdmVkKHRydWUpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cigqdGhpcyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHdlYWtUaGlzLT5tX3N0b3JlLmRlbGV0
ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3Jl
cyhXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBX
VEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFr
VGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigp
XShjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vi
c2l0ZURhdGEpIG11dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbZG9t
YWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhE
ZWxldGVkV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhp
cyA9IFdURk1vdmUod2Vha1RoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAo
IXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBkb21haW4gOiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgewotICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSB3ZWFrVGhpcy0+ZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICAgICAgICAgICAgICAg
ICAgKytzdGF0aXN0aWMuZGF0YVJlY29yZHNSZW1vdmVkOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB3ZWFrVGhpcy0+c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoZmFsc2Up
OwotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xv
Z2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHJlbW92aW5n
IGRhdGEgcmVjb3Jkcy4iKTsKLSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwot
ICAgIH0pOwogfQogCiB1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQg
bnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3QKQEAgLTMzNSw0NyArMTcyLDM0IEBAIGJvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ByZXZhbGVudER1ZVRvRGVidWdN
b2RlKFJlc291cmNlTG9hZFN0CiAgICAgcmV0dXJuIHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJh
YmxlRG9tYWluID09IG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB8fCByZXNvdXJjZVN0
YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiA9PSBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2U7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNz
U3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCkKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpCiB7Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
cmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewot
ICAgICAgICAgICAgaWYgKGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUocmVzb3VyY2VTdGF0aXN0
aWMpKQotICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlz
dGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICAg
ICAgICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNl
U3RhdGlzdGljKTsKLSAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNlID0gcmVz
b3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZhbGVu
Y2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7Ci0gICAgICAgICAgICAgICAg
YXV0byBuZXdQcmV2YWxlbmNlID0gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5j
YWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2
YWxlbmNlKTsKLSAgICAgICAgICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAhPSBjdXJyZW50UHJl
dmFsZW5jZSkKLSAgICAgICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3Vy
Y2VTdGF0aXN0aWMsIG5ld1ByZXZhbGVuY2UpOwotICAgICAgICAgICAgfQorICAgIGZvciAoYXV0
byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkg
eworICAgICAgICBpZiAoaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRpc3Rp
YykpCisgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAgIGVsc2UgaWYgKCFyZXNvdXJj
ZVN0YXRpc3RpYy5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAgICAgbWFya0Fz
UHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOwor
ICAgICAgICAgICAgYXV0byBjdXJyZW50UHJldmFsZW5jZSA9IHJlc291cmNlU3RhdGlzdGljLmlz
UHJldmFsZW50UmVzb3VyY2UgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6TG93OworICAgICAgICAgICAgYXV0byBuZXdQcmV2YWxlbmNlID0g
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jYWxjdWxhdGVSZXNvdXJjZVByZXZh
bGVuY2UocmVzb3VyY2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKKyAgICAgICAgICAg
IGlmIChuZXdQcmV2YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQorICAgICAgICAgICAgICAg
IHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQcmV2YWxlbmNlKTsK
ICAgICAgICAgfQogICAgIH0KK30KIAotICAgIHJlbW92ZURhdGFSZWNvcmRzKFt0aGlzLCB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYg
KG1fcGVyc2lzdGVudFN0b3JhZ2UpCi0gICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5z
Y2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKLQotICAgICAgICBpZiAoIW1fcGFy
YW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhp
cywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0oKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAg
ICAgICAgICByZXR1cm47Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c3luY1N0b3JhZ2VJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisg
ICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0
ZTo6Tm8pOworfQogCi0gICAgICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9hZFN0YXRp
c3RpY3NQcm9jZXNzZWQoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Cit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpCit7CisgICAg
aWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNj
aGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVzKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJh
bWVEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBT
dWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BG
cmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMzk5LDcgKzIyMyw3IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluCiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1
YkZyYW1lRG9tYWluLCBSZWdpc3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRv
cEZyYW1lRG9tYWluLCBGcmFtZUlEIGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9t
cHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CkBAIC00NDAsNyArMjY0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYKICAgICB9KTsKIH0K
IAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdl
QWNjZXNzVW5kZXJPcGVuZXIoUmVnaXN0cmFibGVEb21haW4mJiBkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MsIHVpbnQ2NF90IG9wZW5lclBhZ2VJRCwgUmVnaXN0cmFibGVEb21haW4mJiBvcGVu
ZXJEb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVz
dFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiBk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MsIE9wZW5lclBhZ2VJRCBvcGVuZXJQYWdlSUQsIE9w
ZW5lckRvbWFpbiYmIG9wZW5lckRvbWFpbikKIHsKICAgICBBU1NFUlQoZG9tYWluSW5OZWVkT2ZT
dG9yYWdlQWNjZXNzICE9IG9wZW5lckRvbWFpbik7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CkBAIC00NjEsNyArMjg1LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUmVnaXN0cmEKICAgICBn
cmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgV1RGOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQs
IGZhbHNlLCBbXShib29sKSB7IH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJh
bWVEb21haW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9t
YWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3cs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTQ3Myw3ICsyOTcsNyBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJl
Z2lzdHJhYmxlRG9tYWluJiYgcwogICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1v
dmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFn
ZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFj
Y2Vzc0ludGVybmFsKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJh
YmxlRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1
aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9t
YWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIE9w
dGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21w
dGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNr
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00OTksMzAgKzMyMywx
MiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdl
QWNjZXNzSW50ZXJuYWwoUmVnaXN0cmFibGVEbwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRh
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQogewotICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxk
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91
bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dv
cmtRdWV1ZS5jb3B5UmVmKCksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7
Ci0gICAgICAgIHN0b3JlLT5yZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3
ZWFrVGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtR
dWV1ZS5jb3B5UmVmKCldIChIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRo
V2Vic2l0ZURhdGEpIG11dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChb
d2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSA9IGNy
b3NzVGhyZWFkQ29weShkb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykg
ewotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBk
b21haW4gOiBkb21haW5zV2l0aFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8mIHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOwotICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMuZ3Jh
bmRmYXRoZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdl
YWtUaGlzLT5tX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkg
KyB3ZWFrVGhpcy0+bV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsKLSAgICAgICAgICAg
ICAgICBpZiAod2Vha1RoaXMtPm1fcGVyc2lzdGVudFN0b3JhZ2UpCi0gICAgICAgICAgICAgICAg
ICAgIHdlYWtUaGlzLT5tX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlT
dG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRp
YXRlV3JpdGU6Olllcyk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAg
ICAgICB3ZWFrVGhpcy0+bG9nVGVzdGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6
IGRvbWFpbnMpIHsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICAgICAgc3RhdGlzdGljLmdy
YW5kZmF0aGVyZWQgPSB0cnVlOworICAgIH0KIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291
cmNlc0ZvckRlYnVnTW9kZSgpCkBAIC01NDksNTUgKzM1NSw2IEBAIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjplbnN1cmVQcmV2YWxl
bnRSZXNvCiAgICAgcmV0dXJuIGRvbWFpbnNUb0Jsb2NrOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZShib29sIGVuYWJsZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmIChlbmFibGUpCi0gICAgICAgIFJFTEVBU0Vf
TE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiVHVybmVkIElUUCBEZWJ1ZyBN
b2RlIG9uLiIpOwotI2VuZGlmCi0KLSAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7Ci0g
ICAgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gZW5hYmxlOwotCi0gICAgZW5zdXJlUHJldmFsZW50
UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Ci0gICAgLy8gVGhpcyB3aWxsIGxvZyB0aGUgY3VycmVu
dCBjb29raWUgYmxvY2tpbmcgc3RhdGUuCi0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgdXBkYXRl
Q29va2llQmxvY2tpbmcoW10oKSB7IH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRvbWFpbikKLXsKLSAgICBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVz
b3VyY2UgPSBkb21haW47Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCkKLXsK
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3Rp
Y3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSArK21fbGFzdFN0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElkZW50aWZpZXI7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIobWlu
aW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICpt
X3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyXSB7Ci0gICAgICAg
IGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFtX3Bl
bmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHx8ICptX3BlbmRpbmdT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyICE9IHN0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCBoYXMg
YmVlbiBjYW5jZWxlZC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICAgICAgcHJvY2Vzc1N0YXRpc3Rp
Y3NBbmREYXRhUmVjb3JkcygpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0OwotfQot
CiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNvdXJj
ZURvbWFpbiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNjM1LDcgKzM5Miw3IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0
cmFibGVEb21hCiAgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZO
ZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxh
c3RTZWVuKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJl
c291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC02NDUsNyArNDAyLDcgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGlu
Zyhjb25zdCBSZWdpc3RyYWJsZUQKICAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluKQor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVk
aXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVk
aXJlY3RlZFRvRG9tYWluJiB0YXJnZXREb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CiAKQEAgLTY1OCw3ICs0MTUsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZQog
ICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7
CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJh
bWVEb21haW4mIGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApA
QCAtNzI4LDcgKzQ4NSw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Ojppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsCiAgICAgcmV0dXJuIG1h
cEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRy
eS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2U7CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pIGNvbnN0Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJy
ZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25z
dAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03MzYsNyArNDkzLDcg
QEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihjb25zdCBSZWcKICAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1lRG9tYWluKTsKIH0KIAot
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlcihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29u
c3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKQEAgLTc0NCw3ICs1MDEsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIHJldHVy
biBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFw
RW50cnktPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnModG9wRnJh
bWVEb21haW4pOwogfQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRp
cmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0ZWRUb0Rv
bWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGly
ZWN0ZWRGcm9tRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0Rv
bWFpbikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzc3
LDcgKzUzNCw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAgICAgcmV0dXJuIG1hcEVudHJ5
ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFs
dWUuZ3JhbmRmYXRoZXJlZDsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURv
bWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWlu
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc4Nyw3ICs1NDQsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFJlZwogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHRvcEZyYW1lRG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BG
cmFtZURvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1
YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4p
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc5Nyw3ICs1NTQsNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluKGNvbnN0CiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVj
dERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODA3LDcg
KzU2NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnCiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERv
bWFpbiYgcmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKQEAgLTgxNyw3ICs1NzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUgogICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsK
IH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4s
IGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYg
cmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAg
LTgyNyw3ICs1ODQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdAogICAgIGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04
MzcsOTUgKzU5NCw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpCiAgICAgZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy50
aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbChTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5taW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPSBzZWNvbmRzOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBB
U1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5n
VGltZSA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1f
cGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWUgPSBzZWNvbmRzOwotICAgIHVwZGF0ZUNhY2hl
TWF4QWdlQ2FwKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Ojp1cGRhdGVDYWNoZU1heEFnZUNhcCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYo
bV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lXSAoKSB7
Ci0gICAgICAgIHN0b3JlLT5zZXRDYWNoZU1heEFnZUNhcChzZWNvbmRzLCBbXSB7IH0pOwotICAg
IH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdl
Q2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0gICAgCi0g
ICAgbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSA9IHNlY29uZHM7Ci0g
ICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmIEVOQUJMRShSRVNPVVJD
RV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9
IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXBUaW1lXSAoKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHN0
b3JlLT5uZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPm5ldHdv
cmtTdG9yYWdlU2Vzc2lvbigpLnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKHNlY29uZHMp
OwotICAgIH0pOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2lu
Z2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFtX2FjdGl2ZVBsdWdp
blRva2Vucy5jb250YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuICFtX2xhc3RUaW1l
RGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+PSAobV9sYXN0
VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFsdWUpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2RhdGFSZWNvcmRzQmVpbmdS
ZW1vdmVkID0gdmFsdWU7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0gICAg
ICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gTW9ub3RvbmljVGltZTo6bm93
KCk7Ci19Ci0KIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKQEAgLTEwNTYsMzkgKzcyNCw2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
CiAgICAgcmV0dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMu
Y29udGFpbnMoZmlyc3RQYXJ0eURvbWFpbik7CiB9CiAKLXN0YXRpYyB2b2lkIGRlYnVnTG9nRG9t
YWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4mIGRvbWFpbnMpCi17Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc3Rh
dGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQgPSA1MDsK
LSAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChk
b21haW5zLnNpemUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgewot
ICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFi
b3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3I6ICV7
cHVibGljfXMuIiwgYWN0aW9uLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucykudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxl
RG9tYWluPiBiYXRjaDsKLSAgICBiYXRjaC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1heE51bWJl
ck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KTsKLSAgICBhdXRvIGJhdGNoTnVtYmVyID0gMTsK
LSAgICB1bnNpZ25lZCBudW1iZXJPZkJhdGNoZXMgPSBzdGQ6OmNlaWwoZG9tYWlucy5zaXplKCkg
LyBzdGF0aWNfY2FzdDxmbG9hdD4obWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQp
KTsKLQotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoYmF0
Y2guc2l6ZSgpID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFi
b3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7
cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJl
ck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIGJhdGNoLnNocmluaygwKTsKLSAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7Ci0gICAg
ICAgIH0KLSAgICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7Ci0gICAgfQotICAgIGlmICghYmF0
Y2guaXNFbXB0eSgpKQotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBj
b250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0
Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCku
ZGF0YSgpKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7Ci0gICAgVU5VU0VEX1BB
UkFNKGRvbWFpbnMpOwotI2VuZGlmCi19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CkBAIC0xMTIxLDM1ICs3NTYsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dgogICAgIH0pOwog
fQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFp
bnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBSdW5Mb29wOjptYWlu
KCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sgPSBj
cm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxV
cGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNUb0Js
b2NrLCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3Rh
dGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyQmxvY2tpbmdTdGF0ZUZv
ckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucywgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWlu
cyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zKV0gewotICAgICAgICBzdG9yZS0+Y2FsbFJlbW92
ZURvbWFpbnNIYW5kbGVyKGRvbWFpbnMpOwotICAgIH0pOwotCi0gICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwpAQCAtMTE5Niw1MiArODAyLDYgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdHJhYmxlRG9tYWluc1QK
ICAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nh
cnkoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0b2Rh
eSA9IE9wZXJhdGluZ0RhdGU6OnRvZGF5KCk7Ci0gICAgaWYgKCFtX29wZXJhdGluZ0RhdGVzLmlz
RW1wdHkoKSAmJiB0b2RheSA8PSBtX29wZXJhdGluZ0RhdGVzLmxhc3QoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgd2hpbGUgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0Rh
dGVzV2luZG93KQotICAgICAgICBtX29wZXJhdGluZ0RhdGVzLnJlbW92ZSgwKTsKLQotICAgIG1f
b3BlcmF0aW5nRGF0ZXMuYXBwZW5kKHRvZGF5KTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljKSBjb25zdAotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9w
ZXJhdGluZ0RhdGVzV2luZG93KSB7Ci0gICAgICAgIGlmIChPcGVyYXRpbmdEYXRlOjpmcm9tV2Fs
bFRpbWUocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwg
bV9vcGVyYXRpbmdEYXRlcy5maXJzdCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gSWYgd2UgZG9uJ3QgbWVldCB0aGUgcmVhbCBjcml0ZXJpYSBmb3IgYW4gZXhw
aXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRoZSB1c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRlciByZXN0
cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0aW5nKS4KLSAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKLSAgICAgICAgaWYgKFdhbGxUaW1lOjpub3coKSA+IHJl
c291cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgbV9wYXJhbWV0
ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBt
YXhpbXVtRW50cnlDb3VudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
ICAgIG1fcGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50
OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1bmVF
bnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA9
IHBydW5lVGFyZ2V0Q291bnQ7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CkBAIC0xMjY0LDIyICs4MjQsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIEFTU0VSVCgh
bnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGFyYW1ldGVycyA9IHsgfTsK
LX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1Rlc3RpbmdF
dmVudChjb25zdCBTdHJpbmcmIGV2ZW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9z
dG9yZSksIGV2ZW50ID0gZXZlbnQuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgc3RvcmUtPmxv
Z1Rlc3RpbmdFdmVudChldmVudCk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZG9tYWluLCBTZWNvbmRzIHNlY29uZHMpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CkBAIC0xMzA0LDI3ICs4NDgsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYgogICAgIHNl
dFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpWZXJ5SGlnaCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgc3RvcmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW3N0b3JlID0gc3RvcmUuY29w
eVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNo
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7
Ci0gICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLSAgICB1cGRhdGVDbGllbnRTaWRlQ29va2ll
c0FnZUNhcCgpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKaW5kZXggZTMxMTc3
YTEyYTk4Mjg3N2EwMGViMDY0NDYzMTljMzNhY2YxOWIzNy4uYjdjN2NiNmZiNzJhNDA1YjM0ZmIw
MTY2YmRkODA2ODZhOWE4NjM5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDE3ICsyNywxMyBAQAogCiAjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKIAotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgi
CiAjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCi0jaWYgSEFW
RShDT1JFX1BSRURJQ1RJT04pCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXJDb2NvYS5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEtleWVk
RGVjb2RlcjsKIGNsYXNzIEtleWVkRW5jb2RlcjsKQEAgLTQ2LDM1ICs0MiwxOSBAQCBzdHJ1Y3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE9w
ZXJhdGluZ0RhdGU7CiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2U7CiAKIC8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBv
biB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4K
LWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSA6IHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+IHsKK2NsYXNzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSA6IHB1YmxpYyBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUgewogcHVibGljOgotICAgIHVzaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBX
ZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwotICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgVG9wRnJhbWVEb21h
aW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBTdWJGcmFtZURvbWFp
biA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFN1YlJlc291cmNlRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3REb21h
aW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVjdGVkRnJv
bURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0
ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE5hdmln
YXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBO
YXZpZ2F0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5n
IERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OwotICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwot
ICAgIHVzaW5nIE9wZW5lclBhZ2VJRCA9IHVpbnQ2NF90OwotICAgIHVzaW5nIFBhZ2VJRCA9IHVp
bnQ2NF90OwotICAgIHVzaW5nIEZyYW1lSUQgPSB1aW50NjRfdDsKLQogICAgIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBX
b3JrUXVldWUmKTsKLSAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKCk7CiAK
ICAgICB2b2lkIHNldFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZSYpOwogCi0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKSBvdmVycmlkZTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIGNvbnN0IEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3M+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXA7IH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+IGNy
ZWF0ZUVuY29kZXJGcm9tRGF0YSgpIGNvbnN0OwogICAgIHZvaWQgbWVyZ2VXaXRoRGF0YUZyb21E
ZWNvZGVyKFdlYkNvcmU6OktleWVkRGVjb2RlciYpOwpAQCAtODIsMTQ1ICs2Miw3MyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBtZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiYpOwogICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik+JikgY29uc3Q7CiAKLSAgICB2b2lkIHVwZGF0
ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCB1
cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjbGVhckJsb2Nr
aW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJh
dGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwotICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3JkcygpOwotCi0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYm
KTsKLSAgICB2b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmKTsKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2FuY2VsUGVu
ZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworICAgIHZvaWQgY2xhc3NpZnlQcmV2
YWxlbnRSZXNvdXJjZXMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSWZOZWVkZWQo
KSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsK
IAotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291
cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdDsKLSAgICBib29sIGlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8o
Y29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBj
b25zdDsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpIG92ZXJy
aWRlOwogCi0gICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJik7Ci0gICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Q7
Ci0gICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikg
Y29uc3Q7Ci0gICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlu
cyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSk7
Ci0gICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNv
dXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNSZWdpc3Rl
cmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVk
aXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1l
RG9tYWluJik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29u
c3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOwotICAgIHZvaWQg
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwg
Y29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4m
KTsKLSAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURv
bWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWlu
Jik7CisgICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
Ym9vbCB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0TWF4U3RhdGlz
dGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KTsKLSAgICB2b2lkIHNldFBydW5l
RW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCk7Ci0gICAgdm9pZCByZXNldFBh
cmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29u
c3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNl
RG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29u
c3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBU
b3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0OworICAgIHZvaWQgY2FsY3Vs
YXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKLSAg
ICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sKTsKLSAgICB2b2lkIHNldFRpbWVU
b0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRHcmFuZGZhdGhl
cmluZ1RpbWUoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKGJvb2wpOwotICAgIGJvb2wgaXNEZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIGhhc1N0b3Jh
Z2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9w
dGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92ZXJyaWRl
OworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1l
RG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBoYXNTdG9y
YWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBP
cHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYm
KTsKLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZy
YW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAgICB2b2lkIGdyYW50
U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlE
LCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmKTsKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRU
b0RvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFp
biYsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92ZXJyaWRlOworICAgIHZv
aWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNv
bnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsb2dGcmFtZU5h
dmlnYXRpb24oY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYs
IGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWlu
RnJhbWUpOwotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWlu
Jik7Ci0gICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKTsKLSAgICB2b2lk
IGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25z
dCBSZWRpcmVjdGVkVG9Eb21haW4mKTsKKyAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNIYWRVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKIAotICAgIHZvaWQg
Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICBib29s
IGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwotCi0gICAg
dm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNlY29uZHMpOwotCi0g
ICAgdm9pZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgY29uc3QgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7IH0K
KyAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcykg
b3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tBbmRLZWVw
Q29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgc3RhdGljIGJvb2wg
c2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
OwogICAgIHN0YXRpYyBib29sIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9t
cHQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
Jik7CiAgICAgYm9vbCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwotICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQo
Y29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwogICAgIGJvb2wgd2FzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzJiBjdXJyZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBj
b25zdDsKKyAgICB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhh
c2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0UHJldmFs
ZW50UmVzb3VyY2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIFJlc291cmNlTG9hZFByZXZhbGVu
Y2UpOwogICAgIHVuc2lnbmVkIHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJl
Y3RlZFRvVGhpc0RvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgSGFzaFNldDxS
ZWRpcmVjdGVkVG9Eb21haW4+JiwgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29u
c3Q7Ci0gICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoYm9vbCBlbmFibGVk
KSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkICA9IGVuYWJsZWQ7IH0KLSAgICBib29s
IHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWJ1Z0xvZ2dn
aW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVuYWJs
ZWQ7IH0KLSAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOwotICAgIHZv
aWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwogICAg
IHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJh
bWVEb21haW4mJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0
ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZv
aWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYpOwogICAgIGJvb2wgaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7Ci0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQ
cmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwog
ICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
LSAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7CisgICAgdm9pZCBwcnVuZVN0YXRp
c3RpY3NJZk5lZWRlZCgpIG92ZXJyaWRlOwogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJik7Ci0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURv
bWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCk7Ci0gICAgdm9pZCBzZXRDYWNoZU1heEFnZUNh
cChTZWNvbmRzKTsKLSAgICB2b2lkIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Ci0gICAgdm9pZCBz
ZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhTZWNvbmRzKTsKLSAgICB2b2lkIHVwZGF0ZUNs
aWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lk
IHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKLSNlbmRpZgorICAgIFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigp
IG92ZXJyaWRlOwogCi0gICAgc3RydWN0IFBhcmFtZXRlcnMgewotICAgICAgICBzaXplX3QgcHJ1
bmVFbnRyaWVzRG93blRvIHsgODAwIH07Ci0gICAgICAgIHNpemVfdCBtYXhTdGF0aXN0aWNzRW50
cmllcyB7IDEwMDAgfTsKLSAgICAgICAgT3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbjsKLSAgICAgICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwgeyAxX2ggfTsKLSAgICAgICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAy
NF9oICogNyB9OwotICAgICAgICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwVGltZSB7IDI0X2ggKiA3
IH07Ci0gICAgICAgIFNlY29uZHMgY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lIHsgMjRfaCAq
IDcgfTsKLSAgICAgICAgYm9vbCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkIHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBzaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbCB7IHRydWUgfTsKLSAgICAgICAgYm9vbCBzaG91bGRTdWJt
aXRUZWxlbWV0cnkgeyB0cnVlIH07Ci0gICAgfTsKLQotICAgIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSYgbV9zdG9yZTsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKICAg
ICBXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJz
aXN0ZW50U3RvcmFnZTsKICAgICBIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzPiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKLSNpZiBIQVZFKENPUkVfUFJF
RElDVElPTikKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0jZWxzZQotICAgIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0j
ZW5kaWYKLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBIYXNoU2V0PHVpbnQ2
NF90PiBtX2FjdGl2ZVBsdWdpblRva2VuczsKLSNlbmRpZgotICAgIFBhcmFtZXRlcnMgbV9wYXJh
bWV0ZXJzOwotICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOwotICAg
IFdhbGxUaW1lIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKLSAgICBib29sIG1fZGVi
dWdMb2dnaW5nRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQg
eyBmYWxzZSB9OwotICAgIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluIG1fZGVidWdTdGF0aWNQcmV2
YWxlbnRSZXNvdXJjZSB7IFVSTCB7IFVSTCgpLCAiaHR0cHM6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQu
b3JnIl9zIH0gfTsKLSAgICBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnTWFudWFsUHJldmFsZW50
UmVzb3VyY2U7Ci0gICAgYm9vbCBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKLSAgICBN
b25vdG9uaWNUaW1lIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkOwotCi0gICAgdWlu
dDY0X3QgbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAgfTsK
LSAgICBPcHRpb25hbDx1aW50NjRfdD4gbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1
ZXN0SWRlbnRpZmllcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NzUzMDYzODYxODU1
ODE2MjEwNjY5NjE2M2UzZDU2ODUyNWY3MmFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAKQEAgLTAsMCArMSw1NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisKKyNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIK
KyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3Rh
dHVzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0aWNz
UHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5n
RGF0ZXNXaW5kb3cgeyAzMCB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitzdGF0aWMg
U3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGRv
bWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoZG9tYWluLnN0cmluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKK30KKyNlbmRpZgorCitPcGVyYXRpbmdEYXRlIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGlt
ZShXYWxsVGltZSB0aW1lKQoreworICAgIGRvdWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNlRXBv
Y2goKS5taWxsaXNlY29uZHMoKTsKKyAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAgICBp
bnQgeWVhckRheSA9IGRheUluWWVhcihtcywgeWVhcik7CisgICAgaW50IG1vbnRoID0gbW9udGhG
cm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOworICAgIGludCBtb250aERh
eSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwor
CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwgbW9udGhEYXkgfTsKK30K
KworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpCit7CisgICAgcmV0dXJuIE9w
ZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkpOworfQorCitTZWNvbmRz
IE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkp
ICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0o
Y29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9udGhE
YXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYgbV95
ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwo
Y29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNT
aW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOworfQorCitib29sIE9wZXJh
dGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIuc2Vjb25kc1NpbmNlRXBv
Y2goKTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1
ZXVlJiB3b3JrUXVldWUpCisgICAgOiBtX3N0b3JlKHN0b3JlKQorICAgICwgbV93b3JrUXVldWUo
d29ya1F1ZXVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKK30KKworUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKK30KKwordW5zaWduZWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5jZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICB1bnNpZ25lZCBpbXBvcnRhbmNlID0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXhJbXBvcnRhbmNlOworICAgIGlmICghcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAx
OworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAg
ICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJuIGltcG9ydGFuY2U7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFs
dWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJz
LnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsID0gdmFsdWU7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRU
ZWxlbWV0cnkoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5ID0gdmFsdWU7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAoIXNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkpIHsKKyAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQorICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmNsZWFyKCk7CisgICAg
Zm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9u
KCkucGx1Z2luUHJvY2Vzc2VzKCkpCisgICAgICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChw
bHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsKKyNlbmRpZgorCisgICAgYXV0byBwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnMgPSByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRh
Rm9yKCk7CisgICAgaWYgKHByZXZhbGVudFJlc291cmNlRG9tYWlucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFi
bGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byByZW1vdmUgZGF0YSBy
ZWNvcmRzIGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0cmluZyhwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKKyAgICBzZXREYXRhUmVjb3Jkc0Jl
aW5nUmVtb3ZlZCh0cnVlKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KHByZXZhbGVudFJlc291cmNlRG9t
YWlucyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0g
bV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQs
IHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3ZWFrVGhpcy0+bV9zdG9yZS5kZWxldGVXZWJz
aXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgV1RGTW92
ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0oY29u
c3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVE
YXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW2RvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNXaXRoRGVsZXRl
ZFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBX
VEZNb3ZlKHdlYWtUaGlzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5pbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhXVEZNb3ZlKGRvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPnNldERh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygp
OworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJlY29yZHMuIik7CisjZW5kaWYKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fcGFyYW1ldGVycy5z
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCkKKyAgICAgICAg
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICAKKyAgICByZW1vdmVEYXRhUmVjb3Jk
cyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldICgpIG11dGFibGUgeworICAg
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgp
OworICAgICAgICBzeW5jU3RvcmFnZUlmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX3BhcmFt
ZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMs
IHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldIHsKKyAgICAgICAgICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgbV9zdG9yZS5ub3RpZnlSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUHJvY2Vzc2VkKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHNob3Vs
ZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hv
dWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93
b3JrUXVldWUuY29weVJlZigpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSldICgpIG11dGFibGUg
eworICAgICAgICBzdG9yZS0+cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIHNob3VsZE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3b3JrUXVldWUgPSB3b3Jr
UXVldWUuY29weVJlZigpXSAoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zV2l0
aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2go
W3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEgPSBj
cm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5n
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpOworICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxs
VGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsK
KyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpOworICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmxvZ1Rl
c3RpbmdFdmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
aWYgKGVuYWJsZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJUdXJuZWQgSVRQIERlYnVnIE1vZGUgb24uIik7CisjZW5kaWYKKworICAgIG1f
ZGVidWdNb2RlRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgPSBl
bmFibGU7CisKKyAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAg
ICAvLyBUaGlzIHdpbGwgbG9nIHRoZSBjdXJyZW50IGNvb2tpZSBibG9ja2luZyBzdGF0ZS4KKyAg
ICBpZiAoZW5hYmxlKQorICAgICAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIG1f
ZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWZOZWNlc3NhcnkoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
bV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICsrbV9sYXN0
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBtX3dvcmtRdWV1ZS0+
ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50
aWZpZXJdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgIT0g
c3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikgeworICAgICAgICAgICAgLy8g
VGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOworICAgICAg
ICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSBXVEY6Om51
bGxvcHQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJh
bWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPSBzZWNvbmRzOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJzLm1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9IHNlY29uZHM7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VS
VChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1l
ID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJz
LmNhY2hlTWF4QWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAo
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNhY2hlTWF4
QWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25k
cyA9IG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVdICgpIHsKKyAgICAgICAgc3RvcmUt
PnNldENhY2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2ll
cyhTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKyAgICAKKyAgICBtX3BhcmFtZXRlcnMuY2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1cGRhdGVDbGllbnRTaWRlQ29v
a2llc0FnZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBk
YXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9
IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWVdICgpIHsKKyAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5ldHdvcmtTZXNzaW9uKCkpCisgICAg
ICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc2V0QWdlQ2Fw
Rm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7CisgICAgfSk7CisjZW5kaWYKK30KKworYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX2Rh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBs
dWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkgeworICAg
ICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luUHJv
Y2Vzc1Rva2VuKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHx8IE1vbm90b25p
Y1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG1fcGFy
YW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1f
ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAgICBpZiAobV9kYXRhUmVjb3Jkc0Jl
aW5nUmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IAorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0Zv
ckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorICAgIAorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWlu
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtl
UmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpXSB7CisgICAg
ICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoZG9tYWlucyk7CisgICAgfSk7CisK
KyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJik+JiBwcm9jZXNzRnVuY3Rpb24pIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlz
dGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpCisgICAgICAgIHByb2Nlc3NG
dW5jdGlvbihyZXNvdXJjZVN0YXRpc3RpYyk7Cit9CisKK09wdGlvbmFsPFNlY29uZHM+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0VwaXJhdGlvblRpbWUoKSBjb25zdAor
eworICAgIGlmIChtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbikKKyAgICAg
ICAgcmV0dXJuIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpIC0gbV9wYXJhbWV0
ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKTsKKyAgICAKKyAgICBpZiAobV9v
cGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIHJl
dHVybiBtX29wZXJhdGluZ0RhdGVzLmZpcnN0KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICAK
KyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYg
bmV3RGF0ZXMpCit7CisgICAgaWYgKGV4aXN0aW5nRGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gV1RGTW92ZShuZXdEYXRlcyk7CisgICAgCisgICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+
IG1lcmdlZERhdGVzKGV4aXN0aW5nRGF0ZXMuc2l6ZSgpICsgbmV3RGF0ZXMuc2l6ZSgpKTsKKyAg
ICAKKyAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0b3JzIG9mIGRhdGVzLgorICAgIHN0
ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBleGlzdGluZ0RhdGVzLmVuZCgpLCBuZXdE
YXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2VkRGF0ZXMuYmVnaW4oKSk7CisgICAg
Ly8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KKyAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKG1l
cmdlZERhdGVzKTsKKyAgICAKKyAgICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0aGUgVmVjdG9y
IHNpemUgcmVhY2hlcyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KKyAgICB3aGlsZSAobWVyZ2VkRGF0
ZXMuc2l6ZSgpID4gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIG1lcmdlZERhdGVzLnJl
bW92ZSgwKTsKKyAgICAKKyAgICByZXR1cm4gbWVyZ2VkRGF0ZXM7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vz
c2FyeSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHRv
ZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKKyAgICBpZiAoIW1fb3BlcmF0aW5nRGF0ZXMu
aXNFbXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5n
RGF0ZXNXaW5kb3cpCisgICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOworCisgICAg
bV9vcGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOworfQorCitib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblRpbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisgICAgCisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0Rh
dGVzV2luZG93KSB7CisgICAgICAgIGlmIChPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUobW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgbV9vcGVyYXRpbmdEYXRlcy5maXJzdCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGRvbid0
IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGljLCBjaGVjayB0
aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5seSBmb3IgdGVz
dGluZykuCisgICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKSB7
CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGly
ZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291cmNlU3RhdGlzdGljLm1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlD
b3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcGFyYW1l
dGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50OworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVf
dCBwcnVuZVRhcmdldENvdW50KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNU
b0RlZmF1bHRWYWx1ZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgbV9wYXJhbWV0ZXJzID0geyB9OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0
b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHkoKV0gewor
ICAgICAgICBzdG9yZS0+bG9nVGVzdGluZ0V2ZW50KGV2ZW50KTsKKyAgICB9KTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3Rv
cmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3RvcmFn
ZUFjY2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+
c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOworICAgIHVw
ZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0aW9u
LCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQoreworI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXRpYyBjb25zdCBhdXRvIG1heE51bWJlck9mRG9tYWlu
c0luT25lTG9nU3RhdGVtZW50ID0gNTA7CisgICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGlu
IHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRvbWFpbnNU
b1N0cmluZyhkb21haW5zKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGJhdGNoOworICAgIGJhdGNoLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQp
OworICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOworICAgIHVuc2lnbmVkIG51bWJlck9mQmF0Y2hl
cyA9IHN0ZDo6Y2VpbChkb21haW5zLnNpemUoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtYXhOdW1i
ZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkpOworICAgIAorICAgIGZvciAoYXV0byYgZG9t
YWluIDogZG9tYWlucykgeworICAgICAgICBpZiAoYmF0Y2guc2l6ZSgpID09IG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZP
KFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2ll
cyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1Ymxp
Y31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3Ry
aW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJhdGNoLnNocmluaygwKTsK
KyAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7CisgICAgICAgIH0KKyAgICAgICAgYmF0Y2guYXBw
ZW5kKGRvbWFpbik7CisgICAgfQorICAgIGlmICghYmF0Y2guaXNFbXB0eSgpKQorICAgICAgICBS
RUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7
cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQg
b2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hl
cywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGFjdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRvbWFpbnMpOworI2VuZGlmCit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTUwMDI4ZjkxYjQ0NWI0OWRiYTljMDBm
NzYzMWM1YTNhNDZiZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC0wLDAg
KzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIK
KyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+
CisKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllckNvY29hLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Y2xhc3MgS2V5ZWREZWNvZGVyOworY2xhc3MgS2V5ZWRFbmNvZGVyOworc3RydWN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CisKK2NsYXNzIE9wZXJhdGluZ0RhdGUg
eworcHVibGljOgorICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7CisgICAgCisgICAgc3Rh
dGljIE9wZXJhdGluZ0RhdGUgZnJvbVdhbGxUaW1lKFdhbGxUaW1lKTsKKyAgICBzdGF0aWMgT3Bl
cmF0aW5nRGF0ZSB0b2RheSgpOworICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25z
dDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0
OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdDsK
KyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGlu
dCBtb250aERheSkKKyAgICAgICAgOiBtX3llYXIoeWVhcikKKyAgICAgICAgLCBtX21vbnRoKG1v
bnRoKQorICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCisgICAgeyB9CisKKyAgICBpbnQg
bV95ZWFyIHsgMCB9OworICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgorICAgIGlu
dCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgorfTsKKworLy8gVGhpcyBpcyBhbHdheXMg
Y29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZT4geworcHVibGljOgorICAgIHVzaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJD
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgVG9wRnJhbWVEb21haW4g
PSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBTdWJGcmFtZURvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFN1YlJlc291cmNlRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgUmVkaXJlY3REb21haW4g
PSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBSZWRpcmVjdGVkRnJvbURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFJlZGlyZWN0ZWRU
b0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE5hdmlnYXRl
ZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBOYXZp
Z2F0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIERv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwor
ICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAg
IHVzaW5nIE9wZW5lclBhZ2VJRCA9IHVpbnQ2NF90OworICAgIHVzaW5nIFBhZ2VJRCA9IHVpbnQ2
NF90OworICAgIHVzaW5nIEZyYW1lSUQgPSB1aW50NjRfdDsKKyAgICAKKyAgICBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1
ZXVlJik7CisgICAgdmlydHVhbCB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBIYXNoTWFw
PFN0cmluZywgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsgfQorCisgICAgdm9pZCBwcm9jZXNzU3Rh
dGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3MmKT4mKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb29raWVCbG9j
a2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKKyAgICB2b2lkIHVwZGF0ZUNv
b2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKworICAgIHZvaWQgaW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHByb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1N0b3JhZ2VJZk5l
ZWRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYm
KSA9IDA7CisgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZHVtcFJlc291
cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZh
bHVlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRSZWNv
cmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9w
RnJhbWVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJl
Y3REb21haW4mKSA9IDA7CisKKyAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcm
KTsKKworICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRy
eUNvdW50KTsKKyAgICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJn
ZXRDb3VudCk7CisgICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAg
ICBPcHRpb25hbDxTZWNvbmRzPiBzdGF0aXN0aWNzRXBpcmF0aW9uVGltZSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0ID0gMDsK
KworICAgIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29s
KTsKKyAgICB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwor
ICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKKyAgICB2b2lk
IHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKKyAgICB2
b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKKyAgICB2b2lkIHNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7CisgICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH07CisgICAgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwor
CisgICAgdmlydHVhbCB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJ
RCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFjY2Vzc1N0YXR1cyk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2
aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZy
b21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3Rl
ZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcykgPSAwOworCisgICAgdm9p
ZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOworCisgICAgY29uc3QgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7IH0KKworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKKworcHJvdGVj
dGVkOgorICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdE
YXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhp
c3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpOworICAgIHN0YXRp
YyB2b2lkIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0
IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpOworICAgIGJvb2wgaGFzU3RhdGlz
dGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OworICAgIGJv
b2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blRpbWUpIGNvbnN0OworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgcmVnaXN0ZXJVc2Vy
RGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisgICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQ
cm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CisgICAgdmlydHVhbCBWZWN0b3I8UmVnaXN0
cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpID0gMDsK
KyAgICB2aXJ0dWFsIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5z
VG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGF0
aXN0aWNzSWZOZWVkZWQoKSA9IDA7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRTdG9yYWdlQWNj
ZXNzUHJvbXB0c0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNF
bmFibGVkICA9IGVuYWJsZWQ7IH0KKyAgICBib29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsg
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldERhdGFSZWNv
cmRzQmVpbmdSZW1vdmVkKGJvb2wpOworICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29u
ZHMpOworICAgIHZvaWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKKyAgICB2b2lkIHNldEFnZUNh
cEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMpOworICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lk
ZUNvb2tpZXNBZ2VDYXAoKTsKKworICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKKyAgICAgICAgc2l6
ZV90IHBydW5lRW50cmllc0Rvd25UbyB7IDgwMCB9OworICAgICAgICBzaXplX3QgbWF4U3RhdGlz
dGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb247CisgICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsIHsgMV9oIH07CisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdU
aW1lIHsgMjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAy
NF9oICogNyB9OworICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7
IDI0X2ggKiA3IH07CisgICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07CisgICAgICAgIGJvb2wgc2hv
dWxkU3VibWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9OworICAgIH07CisKK3Byb3RlY3RlZDoKKyAgICBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7CisgICAgUmVmPFdvcmtRdWV1
ZT4gbV93b3JrUXVldWU7CisgICAgSGFzaE1hcDxTdHJpbmcsIFdlYkNvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOworI2lmIEhBVkUoQ09SRV9QUkVE
SUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKKyNlbHNlCisgICAgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0NsYXNzaWZpZXIgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKKyNl
bmRpZgorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIEhhc2hTZXQ8dWludDY0
X3Q+IG1fYWN0aXZlUGx1Z2luVG9rZW5zOworI2VuZGlmCisgICAgUGFyYW1ldGVycyBtX3BhcmFt
ZXRlcnM7CisgICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7CisgICAg
V2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOworICAgIGJvb2wgbV9kZWJ1
Z0xvZ2dpbmdFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGVidWdNb2RlRW5hYmxlZCB7
IGZhbHNlIH07CisgICAgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlOworICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNlIH07CisgICAgTW9u
b3RvbmljVGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZDsKKworICAgIHVpbnQ2
NF90IG1fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgeyAwIH07Cisg
ICAgT3B0aW9uYWw8dWludDY0X3Q+IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElkZW50aWZpZXI7CisKKyAgICBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGlj
UHJldmFsZW50UmVzb3VyY2UgeyBVUkwgeyBVUkwoKSwgImh0dHBzOi8vM3JkcGFydHl0ZXN0d2Vi
a2l0Lm9yZyJfcyB9IH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJl
ck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmVDb2NvYS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWY3ZThmMGEyMGRhZmVhOWFiMjll
NjA3MDc4ZWYxNTdmYjJiYmRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1t
CkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisKKyNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW1wb3J0IDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9t
YWluLmg+CisjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW1wb3J0IDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKK3sKKyAg
ICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IGluaXRPbmNlOworCisgICAgZGlzcGF0Y2hfb25jZSgm
aW5pdE9uY2UsIF57CisgICAgICAgIFNlY29uZHMgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihb
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiJdKTsKKyAgICAgICAg
aWYgKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPiAwX3MgJiYgdGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbiA8PSAyNF9oICogMzApCisgICAgICAgICAgICBzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOworCisgICAgICAgIFNlY29uZHMgbWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiXSk7CisgICAgICAgIGlmIChtaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPiAwX3MgJiYgbWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsIDwgMV9oKQorICAgICAgICAgICAgc2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bCk7CisKKyAgICAgICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUoW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0dyYW5kZmF0aGVyaW5nVGltZSJdKTsKKyAgICAgICAgaWYgKGdyYW5kZmF0aGVyaW5nVGlt
ZSA+IDBfcyAmJiBncmFuZGZhdGhlcmluZ1RpbWUgPD0gMjRfaCAqIDcpCisgICAgICAgICAgICBz
ZXRHcmFuZGZhdGhlcmluZ1RpbWUoZ3JhbmRmYXRoZXJpbmdUaW1lKTsKKworICAgICAgICBzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJJdHBEZWJ1Z01vZGUiXSk7CisgICAgICAgIGF1dG8q
IGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBzdHJpbmdGb3JLZXk6QCJJdHBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJd
OworICAgICAgICBpZiAoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgeworICAgICAgICAg
ICAgVVJMIHVybCB7IFVSTCgpLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIH07CisgICAg
ICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJodHRw
Oi8vIik7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSk7CisgICAgICAgICAgICAgICAgdXJsID0geyBVUkwoKSwgYnVpbGRlci50b1N0
cmluZygpIH07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9KTsKKyAgICAgICAgfQorCisgICAgICAgIFNlY29uZHMgY2FjaGVN
YXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NhY2hlTWF4
QWdlQ2FwIl0pOworICAgICAgICBpZiAoY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMgPiAwX3MgJiYgY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMgPD0gMjRfaCAq
IDM2NSkKKyAgICAgICAgICAgIHNldENhY2hlTWF4QWdlQ2FwKGNhY2hlTWF4QWdlQ2FwRm9yUHJl
dmFsZW50UmVzb3VyY2VzKTsKKyAgICAgICAgCisgICAgICAgIFNlY29uZHMgY2xpZW50U2lkZUNv
b2tpZXNBZ2VDYXAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91Ymxl
Rm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsaWVudFNpZGVDb29raWVzQWdlQ2FwIl0p
OworICAgICAgICBpZiAoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAgPiAwX3MgJiYgY2xpZW50U2lk
ZUNvb2tpZXNBZ2VDYXAgPD0gMjRfaCAqIDM2NSkKKyAgICAgICAgICAgIHNldEFnZUNhcEZvckNs
aWVudFNpZGVDb29raWVzKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKTsKKyAgICB9KTsKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAKaW5kZXggNjU1ZDExZTliNWM2Y2FkYTdjOWI1MjUzNjljNGZlNWNhODQyZmRmMC4uNDJh
ZGRjZmMwNjdiMmJjYmRiMDllOTY5MGRhMDM4YmYzMWE5OWYzYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRl
ICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmgi
CiAjaW5jbHVkZSAiU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmgiCkBAIC00OCw2ICs0OSw5
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgogI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3Jl
Z2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTg2LDcgKzkwLDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQoYm8KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3Ro
aXMsIHZhbHVlXSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9k
YXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAobV9t
ZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwogICAgIH0pOwogfQpAQCAtOTYsOSArMTAy
LDExIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICht
X21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAg
bV9kYXRhYmFzZVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFs
dWUpOwotICAgICAgICAKKwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTEwOCw3ICsxMTYsOSBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3JkcwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBp
ZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRTaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CisgICAg
ICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7
CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBA
IC0xMjAsNyArMTMwLDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBt
X2RhdGFiYXNlU3RvcmUtPnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSh2YWx1ZSk7CisgICAgICAg
IGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRT
aG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwogICAgIH0pOwogfQpAQCAtMTQzLDExICsxNTUs
MTUgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoTmV0d29ya1Nlc3Npb24mIG4KICAgICBwb3N0VGFzayhbdGhpcywgcmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkuaXNvbGF0ZWRDb3B5KCldIHsKICAgICAgICAgbV9tZW1vcnlTdG9yZSA9IHN0ZDo6bWFrZV91
bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqdGhpcywgbV9zdGF0aXN0
aWNzUXVldWUpOwogICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlID0gc3RkOjptYWtlX3VuaXF1
ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+KCptX21lbW9yeVN0b3Jl
LCBtX3N0YXRpc3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSk7Cisg
ICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLml0cERh
dGFiYXNlTW9kZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKnRoaXMs
IG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsKKyAg
ICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+cG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoKm1fbWVt
b3J5U3RvcmUpOworICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUUoMTkzMjk3KTogVGhpcyBz
aG91bGQgYmUgcmV2aXNlZCBhZnRlciB0aGUgVUlQcm9jZXNzIHZlcnNpb24gZ29lcyBhd2F5Lgog
ICAgICAgICBtX21lbW9yeVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIH0p
OwotICAgIAorCiAgICAgbV9kYWlseVRhc2tzVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7CiB9
CiAKQEAgLTE4Nyw2ICsyMDMsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Zmx1c2hBbmREZXN0cm95UGVyc2lzdGVudFN0b3JlKCkKICAgICBtX3N0YXRpc3RpY3NRdWV1
ZS0+ZGlzcGF0Y2goWyZzZW1hcGhvcmUsIHRoaXNdIHsKICAgICAgICAgbV9wZXJzaXN0ZW50U3Rv
cmFnZSA9IG51bGxwdHI7CiAgICAgICAgIG1fbWVtb3J5U3RvcmUgPSBudWxscHRyOworICAgICAg
ICBtX2RhdGFiYXNlU3RvcmUgPSBudWxscHRyOwogICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7
CiAgICAgfSk7CiAgICAgc2VtYXBob3JlLndhaXQoKTsKQEAgLTE5Nyw3ICsyMTQsOSBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZShib29sIHZhbAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBwb3N0VGFzayhbdGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQor
ICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3Jl
LT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKKyAgICAgICAgZWxz
ZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOwogICAgICAgICBwb3N0VGFza1JlcGx5
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTIwOCw3ICsyMjcsOSBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHko
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNl
U3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlKGRvbWFpbik7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAg
ICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpKTsKICAgICB9KTsKQEAgLTIxOSw3ICsyNDAsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5n
KAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3Ro
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFz
ZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzKCk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CiAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0p
OwpAQCAtMjU4LDE3ICsyODEsMjYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHMKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lRG9t
YWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9w
RnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSAmJiAhbV9k
YXRhYmFzZVN0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmhhc1N0b3Jh
Z2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQs
IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIGhh
c1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgaGFzU3RvcmFnZUFj
Y2Vzc10oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYXNT
dG9yYWdlQWNjZXNzKTsKKworICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKSB7CisgICAgICAg
ICAgICBtX2RhdGFiYXNlU3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRv
cEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VBY2Nlc3MpOworICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICB9
IGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmhh
c1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBw
YWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShi
b29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNr
UmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhh
c1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGhhc1N0b3JhZ2VBY2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzI1LDE4ICszNTcsMjYgQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICB9CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3Vi
RnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21h
aW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBwcm9t
cHRFbmFibGVkLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYg
KCFtX21lbW9yeVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKICAgICAgICAgICAgIHBvc3RU
YXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFj
Y2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVl
c3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1l
RG9tYWluKSwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIHByb21wdEVuYWJsZWQsIFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTdG9yYWdlQWNjZXNzU3Rh
dHVzIHN0YXR1cykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdGF0dXNdKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdHVzKTsKKyAgICAgICAg
aWYgKG1fZGF0YWJhc2VTdG9yZSkgeworICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5yZXF1
ZXN0U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFt
ZURvbWFpbiksIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3RvcmFnZUFjY2Vzc1N0
YXR1cyBzdGF0dXMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10oKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RhdHVzKTsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAg
ICAgfSBlbHNlIGlmIChtX21lbW9yeVN0b3JlKSB7CisgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0
b3BGcmFtZURvbWFpbiksIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3RvcmFnZUFj
Y2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVw
bHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1
c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3Rh
dHVzKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAg
ICAgfSk7CiB9CiAKQEAgLTM0OCw3ICszODgsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihSZWdpc3RyYWJsZQog
ICAgIC8vIGNvbWluZyBmcm9tIElQQy4gU3RyaW5ncyB3aGljaCBhcmUgc2FmZSB0byBtb3ZlIHRv
IG90aGVyIHRocmVhZHMgYXMgbG9uZyBhcyBub2JvZHkgb24gdGhpcyB0aHJlYWQgaG9sZHMgYSBy
ZWZlcmVuY2UKICAgICAvLyB0byB0aG9zZSBzdHJpbmdzLgogICAgIHBvc3RUYXNrKFt0aGlzLCBk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFn
ZUFjY2VzcyksIG9wZW5lclBhZ2VJRCwgb3BlbmVyRG9tYWluID0gV1RGTW92ZShvcGVuZXJEb21h
aW4pXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYg
KG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+cmVxdWVzdFN0
b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyksIG9wZW5lclBhZ2VJRCwgV1RGTW92ZShvcGVuZXJEb21haW4pKTsKKyAgICAgICAgZWxzZSBp
ZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9y
YWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Mp
LCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyRG9tYWluKSk7CiAgICAgfSk7CiB9CkBAIC0z
NTcsMTggKzM5OSwyNiBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3Jh
bnRTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJgogewogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lRG9tYWluID0g
c3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVE
b21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX21lbW9y
eVN0b3JlICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21lbW9y
eVN0b3JlLT5ncmFudFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1v
dmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2Fz
R3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCB3YXNHcmFudGVkQWNj
ZXNzXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdhc0dy
YW50ZWRBY2Nlc3MpOworICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKSB7CisgICAgICAgICAg
ICBtX2RhdGFiYXNlU3RvcmUtPmdyYW50U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lRG9t
YWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1By
b21wdGVkTm93LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oYm9vbCB3YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBwb3N0
VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCB3YXNHcmFudGVkQWNjZXNzXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsKKyAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmIChtX21lbW9yeVN0
b3JlKSB7CisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5ncmFudFN0b3JhZ2VBY2Nlc3MoV1RG
TW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBw
YWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRlZEFjY2Vzcyk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0pOwogfQogCkBA
IC00MjMsMTEgKzQ3MywxMyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
cGVyZm9ybURhaWx5VGFza3MoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAg
ICBwb3N0VGFzayhbdGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVy
YXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FsY3VsYXRl
QW5kU3VibWl0VGVsZW1ldHJ5KCk7CisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpIHsKKyAg
ICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkoKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Y2FsY3VsYXRlQW5kU3Vi
bWl0VGVsZW1ldHJ5KCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkgeworICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNl
c3NhcnkoKTsKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNhbGN1bGF0ZUFuZFN1Ym1pdFRl
bGVtZXRyeSgpOworICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTQ3Niw4ICs1MjgsOSBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNv
bnN0IFdlYkZyYW1lUHJveHkmIGZyYQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5G
cmFtZSkKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWluID0gdGFyZ2V0RG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGlzUmVk
aXJlY3QsIGlzTWFpbkZyYW1lXSB7Ci0KLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAg
ICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmxv
Z0ZyYW1lTmF2aWdhdGlvbih0YXJnZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBzb3VyY2VEb21h
aW4sIGlzUmVkaXJlY3QsIGlzTWFpbkZyYW1lKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlT
dG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ0ZyYW1lTmF2aWdhdGlvbih0YXJn
ZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBzb3VyY2VEb21haW4sIGlzUmVkaXJlY3QsIGlzTWFp
bkZyYW1lKTsKICAgICB9KTsKIH0KQEAgLTQ4NSwxNyArNTM4LDIxIEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nV2ViU29j
a2V0TG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9zdFRh
c2soW3RoaXMsIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9w
RnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgbGFzdFNlZW4sIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3Jl
KQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmcodGFy
Z2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBlbHNlIGlmICht
X21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nU3VicmVzb3VyY2VM
b2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsKIAogICAgICAg
ICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0K
IAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlTG9h
ZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJlc291cmNl
RG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
biwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWluID0gdGFyZ2V0
RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlz
b2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisg
ICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUt
PmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBsYXN0
U2Vlbik7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmcodGFyZ2V0RG9tYWluLCB0b3BGcmFtZURv
bWFpbiwgbGFzdFNlZW4pOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwpAQCAtNTA1LDkgKzU2MiwxMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlUmVk
aXJlY3QoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCBzb3VyY2VEb21haW4gPSBz
b3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlm
IChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmxvZ1N1YnJl
c291cmNlUmVkaXJlY3Qoc291cmNlRG9tYWluLCB0YXJnZXREb21haW4pOworICAgICAgICBlbHNl
IGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nU3VicmVz
b3VyY2VSZWRpcmVjdChzb3VyY2VEb21haW4sIHRhcmdldERvbWFpbik7Ci0KICAgICAgICAgcG9z
dFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01
MTcsNyArNTc1LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1Vz
ZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29s
YXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmICht
X2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPmxvZ1VzZXJJbnRl
cmFjdGlvbihkb21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbik7CiAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAt
NTI4LDcgKzU4OCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVh
clVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpCiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAg
aWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Y2xlYXJV
c2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkK
ICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyVXNlckludGVyYWN0aW9uKGRvbWFpbik7
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwpAQCAtNTM3LDcgKzU5OSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpCiB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX21lbW9yeVN0b3JlID8gbV9tZW1v
cnlTdG9yZS0+aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbikgOiBmYWxzZTsKKyAgICAgICAg
Ym9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFiYXNlU3Rv
cmUtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4pCisgICAgICAgICAgICA6IG1fbWVtb3J5
U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluKSA6IGZh
bHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgICAgICB9
KTsKQEAgLTU0OSw3ICs2MTIsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbgogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9
IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFi
YXNlU3RvcmUtPnNldExhc3RTZWVuKGRvbWFpbiwgc2Vjb25kcyk7CisgICAgICAgIGVsc2UgaWYg
KG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRMYXN0U2Vlbihk
b21haW4sIHNlY29uZHMpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTU2MCw3ICs2MjUsOSBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFi
bGVEb21haQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhb
dGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1f
ZGF0YWJhc2VTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKKyAgICAgICAgZWxz
ZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFByZXZh
bGVudFJlc291cmNlKGRvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNTcxLDcgKzYzOCw5IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
UmVnaXN0cmFibGVECiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RU
YXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAg
ICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUt
PnNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5
KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTU5NCw3ICs2NjMsOCBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHko
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlID0gbV9tZW1vcnlTdG9yZSA/
IG1fbWVtb3J5U3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOworICAg
ICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFi
YXNlU3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKQorICAgICAgICAgICAgOiBtX21l
bW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pIDog
ZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUHJldmFsZW50UmVzb3VyY2UsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1ByZXZhbGVudFJlc291cmNlKTsKICAgICAg
ICAgfSk7CkBAIC02MDYsNyArNjc2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG8KICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21h
aW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29sIGlzVmVyeVByZXZhbGVu
dFJlc291cmNlID0gbV9kYXRhYmFzZVN0b3JlID8gbV9kYXRhYmFzZVN0b3JlLT5pc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4pCisgICAgICAgICAgICA6IG1fbWVtb3J5U3RvcmUgPyBtX21l
bW9yeVN0b3JlLT5pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CiAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoW2lzVmVyeVByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICB9
KTsKQEAgLTYxOCw3ICs2ODksOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3VicmVzb3VyY2VE
b21haW4gPSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4g
PSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+
aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFt
ZURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIgPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFiYXNlU3RvcmUtPmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihzdWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21haW4pCisgICAg
ICAgICAgICA6IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1
YnJlc291cmNlVW5kZXIoc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSA6IGZhbHNl
OwogICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIs
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIpOwogICAgICAgICB9KTsKQEAgLTYzMCw3ICs3MDIsOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0
IFJlZ2lzdHJhYgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpcywgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwg
dG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9t
ZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lRG9tYWluLCB0
b3BGcmFtZURvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIgPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFiYXNlU3RvcmUtPmlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pCisgICAgICAg
ICAgICA6IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIoc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKSA6IGZhbHNlOwogICAgICAg
ICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOwogICAg
ICAgICB9KTsKQEAgLTY0Miw3ICs3MTUsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZ2lzdHJhYgogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWlu
UmVkaXJlY3RlZEZyb20gPSBkb21haW5SZWRpcmVjdGVkRnJvbS5pc29sYXRlZENvcHkoKSwgZG9t
YWluUmVkaXJlY3RlZFRvID0gZG9tYWluUmVkaXJlY3RlZFRvLmlzb2xhdGVkQ29weSgpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fbWVtb3J5U3RvcmUg
PyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oZG9tYWluUmVkaXJl
Y3RlZEZyb20sIGRvbWFpblJlZGlyZWN0ZWRUbykgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBtX2RhdGFiYXNlU3RvcmUgPyBtX2RhdGFiYXNlU3Rv
cmUtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9t
YWluUmVkaXJlY3RlZFRvKQorICAgICAgICAgICAgOiBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlT
dG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGRvbWFpblJlZGlyZWN0ZWRGcm9tLCBk
b21haW5SZWRpcmVjdGVkVG8pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk7CiAgICAgICAgIH0pOwpAQCAtNjU0LDcgKzcy
OCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVk
Q29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0
YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Y2xlYXJQcmV2YWxlbnRS
ZXNvdXJjZShkb21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pOwogICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsK
QEAgLTY2NSw3ICs3NDEsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisg
ICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUt
PnNldEdyYW5kZmF0aGVyZWQoZG9tYWluLCB2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVt
b3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmVkKGRv
bWFpbiwgdmFsdWUpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKQEAgLTY3Niw3ICs3NTQsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBkbwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZG9tYWlu
ID0gZG9tYWluLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzR3Jh
bmRGYXRoZXJlZCA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVy
ZWQoZG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9IG1fZGF0
YWJhc2VTdG9yZSA/IG1fZGF0YWJhc2VTdG9yZS0+aXNHcmFuZGZhdGhlcmVkKGRvbWFpbikKKyAg
ICAgICAgICAgIDogbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzR3JhbmRmYXRoZXJl
ZChkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzR3JhbmRGYXRoZXJl
ZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzR3JhbmRGYXRoZXJlZCk7CiAg
ICAgICAgIH0pOwpAQCAtNjg4LDcgKzc2Nyw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnaXN0CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3ViRnJhbWVE
b21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0
b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBt
X2RhdGFiYXNlU3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihzdWJGcmFtZURv
bWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQog
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
KHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNjk5LDcgKzc4MCw5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgUmVnCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNvdXJjZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlm
IChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21h
aW4pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1v
cnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKHN1YnJlc291cmNlRG9t
YWluLCB0b3BGcmFtZURvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNzEwLDcgKzc5Myw5IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8o
Y29uc3QgUmVnaXN0CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBw
b3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHko
KSwgZG9tYWluUmVkaXJlY3RlZFRvID0gZG9tYWluUmVkaXJlY3RlZFRvLmlzb2xhdGVkQ29weSgp
XSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1f
ZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdFRvKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8p
OworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHN1YnJlc291cmNlRG9tYWluLCBk
b21haW5SZWRpcmVjdGVkVG8pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTcyMSw3ICs4MDYsOSBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20o
Y29uc3QgUmVnaQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9z
dFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCks
IGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVkaXJlY3RlZEZyb20uaXNvbGF0ZWRDb3B5
KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAo
bV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3Rl
ZEZyb20pOworICAgICAgICBlbHNlIGlmIChtX21lbW9yeVN0b3JlKQogICAgICAgICAgICAgbV9t
ZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oc3VicmVzb3VyY2VE
b21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC03MzIsNyArODE5LDkgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBSZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVjdGVkVG8uaXNvbGF0ZWRDb3B5
KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAo
bV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7Cisg
ICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGly
ZWN0ZWRUbyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgIH0pOwpAQCAtNzQzLDcgKzgzMiw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpc3Ry
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgdG9wRnJh
bWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3Rl
ZEZyb20gPSBkb21haW5SZWRpcmVjdGVkRnJvbS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUp
CisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUtPnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RG
cm9tKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkRnJvbSk7CisgICAgICAgIGVsc2Ug
aWYgKG1fbWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFtZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZEZyb20p
OwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKQEAgLTc1NSwxMyArODQ2LDE5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKENvbXBsZXRpb25IYW5kCiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAg
ICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlICYm
ICFtX2RhdGFiYXNlU3RvcmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworCisgICAgICAgIGF1
dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewog
ICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAg
ICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW2NhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKCkgeyB9KTsKKyAgICAgICAg
ZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0
ZUNvb2tpZUJsb2NraW5nKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3Iu
Y29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTc3MCwxNCArODY3LDE5IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlRm9yRG9tYWlucyhjb25zCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVz
dGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4K
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21h
aW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUgJiYgIW1f
ZGF0YWJhc2VTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9tYWluc1Rv
QmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9kYXRhYmFz
ZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2lu
Z0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5
U3RvcmUpCisgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZ0Zv
ckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0Fn
Z3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTc4NiwxNCArODg4
LDE5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFy
QmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNl
ZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4g
dGhyZWFkLgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2soW3Ro
aXMsIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlucyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICgh
bV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUgJiYgIW1fZGF0YWJh
c2VTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21l
bW9yeVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAg
ICAgICAgbV9kYXRhYmFzZVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFp
bnMsIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSgp
IHsgfSk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVtb3J5U3RvcmUpCisgICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjYWxsYmFj
a0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAg
fSk7CiB9CiAKQEAgLTgwNCwyMiArOTExLDM2IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyCiAg
ICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQogICAgICAgICAgICAgbV9wZXJzaXN0ZW50
U3RvcmFnZS0+Y2xlYXIoKTsKIAotICAgICAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdTY29w
ZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX21lbW9yeVN0b3Jl
ICYmICFtX2RhdGFiYXNlU3RvcmUpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhl
ciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBiZWlu
ZyBjbGVhcmVkLCBtX21lbW9yeVN0b3JlIGFuZCBtX2RhdGFiYXNlU3RvcmUgYXJlIG51bGwgd2hl
biB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsKKworICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdn
cmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsKIAotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkgewotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBs
ZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlckNhbGxlcildICgp
IG11dGFibGUgeworICAgICAgICBpZiAobV9kYXRhYmFzZVN0b3JlKSB7CisgICAgICAgICAgICBt
X2RhdGFiYXNlU3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhp
cy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxs
YmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZGF0YWJhc2VTdG9yZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVE
YXRhKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcildKCkg
bXV0YWJsZSB7IH0pOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFm
dGVyIGJlaW5nIGNsZWFyZWQsIG1fZGF0YWJhc2VTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRv
IGdyYW5kZmF0aGVyIGRhdGEuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7
CisgICAgICAgIH0gZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkgeworICAgICAgICAgICAgbV9tZW1v
cnlTdG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlS
ZWYoKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdn
cmVnYXRvci5jb3B5UmVmKCldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGlmIChzaG91
bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykgewogICAg
ICAgICAgICAgICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShjb21wbGV0
aW9uSGFuZGxlckNhbGxlci5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9t
ZW1vcnlTdG9yZS0+Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKFtjYWxsYmFja0FnZ3Jl
Z2F0b3IgPSBXVEZNb3ZlKGNhbGxiYWNrQWdncmVnYXRvcildKCkgbXV0YWJsZSB7IH0pOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xP
RyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQs
IG1fbWVtb3J5U3RvcmUgaXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNob3VsZEdyYW5kZmF0aGVyU3Rh
dGlzdGljczo6WWVzKQotICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQgQmVmb3JlIGJlaW5nIGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUg
aXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOwogICAgICAgICB9CiAg
ICAgfSk7CiB9CkBAIC04MzcsNyArOTU4LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmQKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNv
bmRzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKG1fZGF0YWJh
c2VTdG9yZSkKKyAgICAgICAgICAgIG1fZGF0YWJhc2VTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihzZWNvbmRzKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vj
b25kcyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwpAQCAtODQ3LDcgKzk3MCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2VjCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vj
b25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAobV9kYXRh
YmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CisgICAgICAgIGVsc2UgaWYgKG1fbWVt
b3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRNaW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC04NTgsNyArOTgzLDkgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRz
IHNlY29uZHMsIENvbXAKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBv
c3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCisg
ICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNlU3RvcmUt
PnNldEdyYW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1v
cnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGlt
ZShzZWNvbmRzKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKQEAgLTkwMyw3ICsxMDMwLDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnkKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBtYXhp
bXVtRW50cnlDb3VudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAgICBp
ZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5zZXRNYXhT
dGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7CisgICAgICAgIGVsc2UgaWYgKG1f
bWVtb3J5U3RvcmUpCiAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRNYXhTdGF0aXN0aWNz
RW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CkBAIC05MTUsNyArMTA0NCw5IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBy
dW5lVGFyZ2V0Q291CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RU
YXNrKFt0aGlzLCBwcnVuZVRhcmdldENvdW50LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpCisgICAgICAgIGlmIChtX2RhdGFiYXNlU3RvcmUpCisgICAgICAgICAgICBtX2RhdGFiYXNl
U3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50KTsKKyAgICAgICAg
ZWxzZSBpZiAobV9tZW1vcnlTdG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFBy
dW5lRW50cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50KTsKIAogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKQEAgLTkyNyw3ICsxMDU4LDkgQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVs
dFZhbHVlcyhDb21wbGV0aW9uSGEKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQorICAgICAg
ICBpZiAobV9kYXRhYmFzZVN0b3JlKQorICAgICAgICAgICAgbV9kYXRhYmFzZVN0b3JlLT5yZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAgICAgICAgZWxzZSBpZiAobV9tZW1vcnlT
dG9yZSkKICAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVs
dFZhbHVlcygpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCmlu
ZGV4IDA2MzQzODVjMTBiMzI0MTg0MTI4OGZmODQxOTFkOTI4MjU5OGI4ZDEuLjhjYjU0MjI1ZmI1
ZTdlMjk5ZWNkZjYwNWU5OTE2MzY0ZDE1ZmFlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTUyLDYgKzUyLDcgQEAgZW51bSBjbGFzcyBTaG91
bGRTYW1wbGUgOiBib29sOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtTZXNz
aW9uOworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU7CiBjbGFzcyBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwpAQCAtMTkxLDYg
KzE5Miw3IEBAIHByaXZhdGU6CiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9zdGF0aXN0aWNzUXVldWU7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4g
bV9tZW1vcnlTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlPiBtX3BlcnNpc3RlbnRTdG9yYWdlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4gbV9kYXRhYmFzZVN0b3Jl
OwogCiAgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBt
X2RhaWx5VGFza3NUaW1lcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcAppbmRleCBmNjc5NDRiODNkNDI1N2ZlZGU5OTIwMmE1ZTc3MDZkMGRl
Yjk3NmRmLi44MTAxYzRkMWVmODljYWViNjIwMDQ5MmQ5NTlkNDg5NzliOTcyOGYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzIs
NiArNzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1
bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJs
ZWRGZWF0dXJlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0
aG1zLmg+CkBAIC0zMjYsNiArMzI3LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICB9
CiAjZW5kaWYKIAorICAgIFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuc2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxlZChwYXJhbWV0ZXJzLnNob3VsZEVuYWJs
ZUl0cERhdGFiYXNlTW9kZSk7CisKICAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogICAgIGZvciAoY29u
c3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5w
ZW5kaW5nQ29va2llcykKICAgICAgICAgZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpLnNldENvb2tpZShjb29raWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAppbmRleCBjNmRmMDhlOWZiNzc2NmY3NzBhZmFkZWYxYWE3ZjIxMjk0OWQxZjU1Li42ZDNhNTJh
ZTNkZGIyYmIyOTBhYTc1ZmI2NmY0MzE0MWFhYjM3ZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcApAQCAtOTMsNiArOTMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKICAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKICNlbmRpZgorICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSXRwRGF0YWJhc2VNb2RlOwogfQogCiBib29sIE5ldHdv
cmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVy
LCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcmVzdWx0KQpAQCAtMjE3LDYgKzIx
OCw5IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6
OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNl
bmRpZgogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlSXRwRGF0
YWJhc2VNb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRleCAyZmQzYmU5ZmRlZDk4MGI3NTcz
Y2UzYjUxNmIwN2E5NmZhZGFmNzNiLi41MzJjZWYzODg0NGM4ZjcyYmJiNzRkMzExNTliOWM0YjMz
MjIxNjA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCkBAIC0xMTEsNiArMTExLDcg
QEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICAgICBWZWN0b3I8
U3RyaW5nPiB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5kbGU7CiAgICAgYm9vbCBzaG91
bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5IHsgZmFsc2UgfTsK
ICNlbmRpZgorICAgIGJvb2wgc2hvdWxkRW5hYmxlSXRwRGF0YWJhc2VNb2RlIHsgZmFsc2UgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllci5jcHAKaW5kZXggZjFlYTc5MjlkNTMwN2YwNWRjMDY4MGY2NDc1NGE2OWY4M2U5
ODU2Yi4uYjQ0OTJhNGQyNDlmYzk3ZGNhOGFhM2QzMjNkMzUyNzliYWY2ZDdkZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDEyIEBAIFJlc291
cmNlTG9hZFByZXZhbGVuY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1
bGF0ZVJlc291cmNlUHJldmFsCiAgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNp
emUoKTsKICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHJlc291
cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuc2l6ZSgpOwogICAgIGF1
dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMudG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zaXplKCk7Ci0gICAgCisKKyAgICByZXR1cm4gY2FsY3Vs
YXRlUmVzb3VyY2VQcmV2YWxlbmNlKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3Vu
dCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgY3VycmVudFBy
ZXZhbGVuY2UpOworfQorCitSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UodW5zaWduZWQgc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnNDb3VudCwgdW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBSZXNvdXJj
ZUxvYWRQcmV2YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNlKQorewogICAgIGlmICghc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50CiAgICAgICAgICYmICFzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQKICAgICAgICAgJiYgIXN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnNDb3VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaAppbmRleCBhY2Yx
ZjM4OWRkNTFhMDBjNTEwN2RjNjcyZjlkM2ZiYTlmMmJmZWYwLi41OGY1NjVhMTFhNzczNWQwNDEy
OTNjYWJmNDFjMjViYzY1NWQxOTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00MiwxMCArNDIsMTEgQEAgcHVibGljOgogICAgIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgflJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyKCkgPSBkZWZhdWx0OwogICAgIFJlc291cmNlTG9hZFByZXZhbGVuY2Ug
Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGN1cnJl
bnRQcmV2YWxlbmNlKTsKKyAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGNhbGN1bGF0ZVJlc291
cmNlUHJldmFsZW5jZSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQg
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY3VycmVudFByZXZhbGVu
Y2UpOwogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNpZ25lZCBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
c0NvdW50KQorICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKKyAgICAgICAgcmV0
dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKICAgICB9CiAgICAgYm9vbCBjbGFzc2lmeVdpdGhW
ZWN0b3JUaHJlc2hvbGQodW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9j
bGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3Bw
CmluZGV4IGFjZmJlM2NkYmMxYzNhOTUxZjcyMzcwYmQ1OTg3ZTQ3MmU4ZDRjMjUuLmUxZjUzMDRl
OTMyMjY4NGVjNjA2MjZjNjMwMzk3NWYyM2QxYjhjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vY2xhc3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvY29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAKQEAgLTM1LDE1ICsz
NSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xhc3NpZmllckNvY29hOjpjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQorYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hOjpjbGFzc2lmeSh1bnNpZ25lZCBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luc0NvdW50KQogewogICAgIGlmICghY2FuVXNlQ29yZVByZWRpY3Rpb24oKSkKLSAgICAgICAg
cmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVPcmlnaW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKKyAgICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0
aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3Jp
Z2luc0NvdW50KTsKIAogICAgIFZlY3Rvcjxzdm1fbm9kZT4gZmVhdHVyZXM7CiAKLSAgICBpZiAo
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQotICAgICAgICBmZWF0dXJlcy5h
cHBlbmQoezEsIHN0YXRpY19jYXN0PGRvdWJsZT4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3Jp
Z2luc0NvdW50KX0pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnQpCisgICAgICAgIGZlYXR1cmVzLmFwcGVuZCh7MSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQpfSk7CiAgICAgaWYgKHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudCkKICAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsyLCBzdGF0
aWNfY2FzdDxkb3VibGU+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCl9KTsKICAg
ICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKaW5kZXggYjkwODRiZWI5MGE0M2FiZjViNzU0ODY0ZTkw
MmM2NTI0MWEyNTk5MS4uZTY1NWMzYjk1ZWNlYzg2MWZiYjVhZmRkOTFiNzgzODhlY2NiYjI2ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCkBAIC0xMzc5LDYgKzEz
NzksMTQgQEAgSXRwRGVidWdNb2RlRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9u
OiAiSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVudGlvbiBEZWJ1ZyBNb2RlIgogICB3ZWJjb3Jl
QmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwogCitJdHBEYXRhYmFzZU1vZGVFbmFibGVk
OgorICB0eXBlOiBib29sCisgIGRlZmF1bHRWYWx1ZTogZmFsc2UKKyAgaHVtYW5SZWFkYWJsZU5h
bWU6ICJJVFAgRGF0YWJhc2UgQmFja2VuZCBNb2RlIgorICBodW1hblJlYWRhYmxlRGVzY3JpcHRp
b246ICJJbnRlbGxpZ2VudCBUcmFja2luZyBQcmV2ZW50aW9uIERhdGFiYXNlIEJhY2tlbmQgTW9k
ZSIKKyAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMKKyAgY2F0ZWdvcnk6
IGludGVybmFsCisKIFNlcnZpY2VXb3JrZXJzRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBkZWZh
dWx0VmFsdWU6IERFRkFVTFRfU0VSVklDRV9XT1JLRVJTX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4
IDU5Y2VmODNhNTIzOWVlYTBjYTE5N2Y2OGNiMzcyMDY3Yjk3OWUwMjkuLjA0MzVhOTUwZWRmZDJh
ZTUxYzQzYWJkODFmMDUxOTcyNDRlZjdlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtNDIsOCArNDIsMTAg
QEAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldFN0cmVhbS5jcHAKIE5ldHdvcmtQcm9jZXNz
L1BpbmdMb2FkLmNwcAogTmV0d29ya1Byb2Nlc3MvUHJlY29ubmVjdFRhc2suY3BwCiAKK05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
Y3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2Vi
Q29va2llTWFuYWdlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGM0M2U0ZTUwOTBi
ZWRjNzFjOWRlNjNmODY3Zjc0MGE5NDFmZDBmMTIuLmMwMGZhNTdiOTdkYTk2ZmIzZGFjYzdiNDYy
ZGExZDRmNDM3MWZlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5LDYgKzI5LDcgQEAg
TmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KIE5ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KIE5ldHdvcmtQcm9jZXNzL2NvY29hL05l
dHdvcmtTZXNzaW9uQ29jb2EubW0KIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAKQEAgLTMzMiw3ICsz
MzMsNiBAQCBVSVByb2Nlc3MvQ29jb2EvTWVkaWFDYXB0dXJlVXRpbGl0aWVzLm1tCiBVSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudElt
cGxDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5t
bQotVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29h
Lm1tCiBVSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tCiBVSVByb2Nl
c3MvQ29jb2EvU2Vzc2lvblN0YXRlQ29kaW5nLm1tCiBVSVByb2Nlc3MvQ29jb2EvU3lzdGVtUHJl
dmlld0NvbnRyb2xsZXJDb2NvYS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmVDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTViYTYyNzY2NTJlMWRm
NmZkYTRkZDhiNTc1NGUzYmYwMWMzNzZkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotCi0jaW1wb3J0IDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWluLmg+
Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKLXsKLSAg
ICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IGluaXRPbmNlOwotCi0gICAgZGlzcGF0Y2hfb25jZSgm
aW5pdE9uY2UsIF57Ci0gICAgICAgIFNlY29uZHMgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihb
W05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiJdKTsKLSAgICAgICAg
aWYgKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPiAwX3MgJiYgdGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbiA8PSAyNF9oICogMzApCi0gICAgICAgICAgICBzZXRUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgICAgIFNlY29uZHMgbWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiXSk7Ci0gICAgICAgIGlmIChtaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPiAwX3MgJiYgbWluaW11bVRpbWVCZXR3ZWVu
RGF0YVJlY29yZHNSZW1vdmFsIDwgMV9oKQotICAgICAgICAgICAgc2V0TWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bCk7Ci0KLSAgICAgICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUoW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0dyYW5kZmF0aGVyaW5nVGltZSJdKTsKLSAgICAgICAgaWYgKGdyYW5kZmF0aGVyaW5nVGlt
ZSA+IDBfcyAmJiBncmFuZGZhdGhlcmluZ1RpbWUgPD0gMjRfaCAqIDcpCi0gICAgICAgICAgICBz
ZXRHcmFuZGZhdGhlcmluZ1RpbWUoZ3JhbmRmYXRoZXJpbmdUaW1lKTsKLQotICAgICAgICBzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJJdHBEZWJ1Z01vZGUiXSk7Ci0gICAgICAgIGF1dG8q
IGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBzdHJpbmdGb3JLZXk6QCJJdHBNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSJd
OwotICAgICAgICBpZiAoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAgICAg
ICAgVVJMIHVybCB7IFVSTCgpLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIH07Ci0gICAg
ICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdCdWls
ZGVyIGJ1aWxkZXI7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJodHRw
Oi8vIik7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdXJsID0geyBVUkwoKSwgYnVpbGRlci50b1N0
cmluZygpIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShSZWdpc3Ry
YWJsZURvbWFpbiB7IHVybCB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIFNlY29uZHMgY2FjaGVN
YXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVz
ZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NhY2hlTWF4
QWdlQ2FwIl0pOwotICAgICAgICBpZiAoY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMgPiAwX3MgJiYgY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMgPD0gMjRfaCAq
IDM2NSkKLSAgICAgICAgICAgIHNldENhY2hlTWF4QWdlQ2FwKGNhY2hlTWF4QWdlQ2FwRm9yUHJl
dmFsZW50UmVzb3VyY2VzKTsKLSAgICAgICAgCi0gICAgICAgIFNlY29uZHMgY2xpZW50U2lkZUNv
b2tpZXNBZ2VDYXAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91Ymxl
Rm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsaWVudFNpZGVDb29raWVzQWdlQ2FwIl0p
OwotICAgICAgICBpZiAoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAgPiAwX3MgJiYgY2xpZW50U2lk
ZUNvb2tpZXNBZ2VDYXAgPD0gMjRfaCAqIDM2NSkKLSAgICAgICAgICAgIHNldEFnZUNhcEZvckNs
aWVudFNpZGVDb29raWVzKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKTsKLSAgICB9KTsKLX0KLQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDk4NzQ2YzM3YzUyNGM4Nzg0YjdhNmU4MjY2NzY2NjUx
NzVmNmZiMGQuLjM4MDhkODljNmYzOWQ5NTIyZWI2YjA0OGM0MjgzOTlmYjAyYTdlZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbQpAQCAtMjk2LDYgKzI5Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5p
dGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAjaWYgRU5B
QkxFKFBST1hJTUlUWV9ORVRXT1JLSU5HKQogICAgIHBhcmFtZXRlcnMud2lyZWxlc3NDb250ZXh0
SWRlbnRpZmllciA9IG1fY29uZmlndXJhdGlvbi0+d2lyZWxlc3NDb250ZXh0SWRlbnRpZmllcigp
OwogI2VuZGlmCisKKyAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUl0cERhdGFiYXNlTW9kZSA9
IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJu
YWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6Oml0cERhdGFiYXNlTW9kZUVuYWJsZWRLZXko
KS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBs
YXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1By
b3Zpc2lvbmFsUGFnZVByb3h5LmgKaW5kZXggODg4M2Y3MzQ1Njc2OTQ0ZjQzYjM4ODAxYzVhNTFh
YzA3MGIyNDViMS4uMTZiZDVjZDU4NTEzYWZhZTliMDAyZDY5MjgyNzMyMGE2Njc3NDk4MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiU2Fu
ZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5o
IgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZVBv
bGljaWVzRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCA3YmUwMmU2MGFhOWUwMzMzOTE4OTRm
YjlhZTk5NWM0MTNjNTJjMzZjLi5kNjQ1MGI3NWExODVmMTM1NzhhZDMwNjU2YWNiMWJkMjQ3NWFi
YTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC04
Niw2ICs4Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzV2FybWluZy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1l
QXBwbGljYXRpb25DaGVja3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1
YWdlLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI0N2JhOTFkZWU0MTExZWFkM2Y3
NmI4YmMxMGI5MDU5ZDEwYTUzZTIuLjk3MzU2MGQ0MjIzMmY3OWUxMTI5MmRlMTNiYmJiMjNhN2Rh
YWE1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMzUyNyw2ICszNTI3LDggQEAKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8q
IFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUlu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2MkI3NDg0MTIwQkJBMkQw
MDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDsgcGF0aCA9IENsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgcGF0aCA9IENsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QTE1MDY3MjFERDU2Mjk4MDAxRjRCNTggLyogY29tLmFwcGxl
LldlYktpdC5wbHVnaW4tY29tbW9uLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9ICJjb20uYXBw
bGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IiOyBwYXRoID0gIkRlcml2ZWRTb3VyY2VzL1dlYktp
dDIvY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9IEJVSUxU
X1BST0RVQ1RTX0RJUjsgfTsKIAkJN0ExRTJBODQxRUVGRTg4QTAwMzdBMEUwIC8qIEFQSU5vdGlm
aWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU5v
dGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBM0FD
RTFBMUVFRUY3OEMwMEE4NjRBNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVQYWdl
TG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTQ2LDYgKzM1
NDgsOSBAQAogCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0FCNkVBNDQxRUVBQUUyMzAwMDM3QjJCIC8qIEFQSUljb25EYXRhYmFzZUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElJY29uRGF0YWJhc2VDbGll
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDYxRUVBQjZCMDAwMDM3
QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTgyMjFDQUUwNzAw
MERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBw
YXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3QUNFODJFOTIyMURFNzIyMDAwREE5NEMgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbTsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdBRjIzNjFFMUU3OUEzQjQwMDQzOEEwNSAvKiBXZWJFcnJvcnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRXJyb3JzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MUYxRTc5QTNEODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFcnJvcnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MjIxRTc5QTQzMTAwNDM4QTA1IC8qIFdlYkVycm9yc0Nv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXJyb3Jz
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNjk2LDcgKzM3MDEsNiBA
QAogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VE
aWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjJFMUE2
NzdENEEwMEM2OTdDNSAvKiBXS0RpYWdub3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0RpYWdub3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MzdBNjYwMDIwRTJBRDg0MDBBOURCRDgg
LyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNjIxQTY4
QjM0MjAwMzBGMzg2IC8qIEFQSURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjY4MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tE
aWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODM4OTFCNkExQTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNMb2dnaW5n
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzIxLDcgKzUzMjUsNiBA
QAogCQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2Vy
UHJveHkuaCAqLywKIAkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNz
aW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkw
MUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCi0JCQkJODM3QTY2MDAy
MEUyQUQ4NDAwQTlEQkQ4IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29h
Lm1tICovLAogCQkJCTVDQTk4NTRCMjEwQkVCNzMwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJu
aW5nQ29jb2EubW0gKi8sCiAJCQkJMUEwMDJENDcxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25T
dGF0ZUNvZGluZy5oICovLAogCQkJCTFBMDAyRDQ2MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9u
U3RhdGVDb2RpbmcubW0gKi8sCkBAIC02OTIzLDEwICs2OTI2LDE1IEBACiAJCTdBODQzQTFEMjFF
NDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwICovLAorCQkJCTdBMEQ3ODYxMjIwNzkxRUMw
MEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oICovLAogCQkJ
CTdBRkJEMzY0MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuY3BwICovLAogCQkJCTdBRkJEMzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLywKIAkJCQk3QUZCRDM2OTIxRTU0MkU4MDA1REJB
Q0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCAqLywKIAkJ
CQk3QUZCRDM2ODIxRTU0MkU4MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNp
c3RlbnRTdG9yYWdlLmggKi8sCisJCQkJN0FDRTgyRTgyMjFDQUUwNzAwMERBOTRDIC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCisJCQkJN0FDRTgyRTcyMjFDQUUwNjAwMERB
OTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAorCQkJCTdBQ0U4MkU5MjIx
REU3MjIwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLywK
IAkJCQk3QTQxRTlGQTIxRjgxREFDMDBCODhDREIgLyogU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0
aWNzLmggKi8sCiAJCQkJN0EzRkVDQTEyMUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VBY2Nlc3NT
dGF0dXMuaCAqLywKIAkJCQk3QTg0M0ExQTIxRTQxRkIyMDBERUY2NjMgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKQEAgLTEwNzkyLDcgKzEwODAwLDYgQEAKIAkJCQky
RDkxMzQ0NDIxMkNGOUYwMDAxMjhBRkQgLyogTmV0c2NhcGVQbHVnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkQ5MkE3OTYyMTJCNkFEQTAwRjQ5M0ZEIC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEOTEzNDQ1MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRz
Y2FwZVBsdWdpblN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk2QkQwNTg2NjIyMENFOEMy
MDAwQkVENUMgLyogTmV0d29ya0FkQ2xpY2tBdHRyaWJ1dGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MUREOUYyODE2MzY3REEyMDAxNTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJGMDYwRTExNjU0
MzE4NTAwRjMyODFCIC8qIE5ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgzRiAvKiBO
ZXR3b3JrTUROU1JlZ2lzdGVyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363476</attachid>
            <date>2019-03-03 19:01:23 -0800</date>
            <delta_ts>2019-03-04 08:24:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194867-20190303190122.patch</filename>
            <type>text/plain</type>
            <size>284345</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2IxNjc2M2EwM2M2Y2Nm
MDY3M2Q1ZGQzMWM3NDE1NjQ0ZTcyZTc1Ny4uZWMyNDQ5YjM4MTBhOWI5OTFiMDgxZTJiMzQ0N2Fh
ZWE5YzJjYjg3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBv
cnQgdXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxz
byBleHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdl
YkNvcmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRh
YmFzZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIw
MTktMDMtMDEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFNl
cmlhbGl6ZSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRlTW9kZSBhcyBhbiBlbnVtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IGM1YjMyMTdmMDM5MmVmYjU5N2UzODZjOTljMjM1M2NkMWQwNWJiZDEuLjNiZmI1
NmI4MTcxZWZjZGJmNjk5OWIyOWZkZmY4NWRhOWNiNWE2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjgzIEBACisyMDE5LTAyLTIxICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgor
CisgICAgICAgIFVzZSBhIFNRTGl0ZSBkYXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NDg2NworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MgZGF0YWJhc2UgcGxpc3QgaXMgaW5lZmZpY2llbnQuIEl0IHJlcXVpcmVzIG1v
cmUgbWVtb3J5IHVzZQorICAgICAgICB0aGFuIGl0IG5lZWRzLCBhbmQgZm9yY2VzIGxvdHMgb2Yg
bG9vcGluZyBhbmQgc3RyaW5nIGNvbXBhcmlzb25zIHRvIGZpbmQgaW5mb3JtYXRpb24uCisKKyAg
ICAgICAgVGhpcyBwcm9ibGVtIGhhcyBhbHJlYWR5IGJlZW4gc29sdmVkIGluIHRoZSBmb3JtIG9m
IHJlbGF0aW9uYWwgZGF0YWJhc2VzLiBXZSB1c2UgdGhlbQorICAgICAgICBlbHNld2hlcmUgaW4g
V2ViS2l0LCBhbmQgc2hvdWxkIGRvIHNvIGZvciB0aGlzIHN0b3JhZ2UgYXMgd2VsbC4KKworICAg
ICAgICBUaGlzIHBhdGNoIGNyZWF0ZXMgYW4gb3B0aW9uYWwgU1FMaXRlIGRhdGFiYXNlIHRvIGhh
bmRsZSBJVFAgb3BlcmF0aW9ucy4KKworICAgICAgICAxLiBJdCBhZGRzIGEgbmV3IGludGVybmFs
IGV4cGVyaW1lbnRhbCBmZWF0dXJlIGZsYWcgdG8gYWN0aXZhdGUgaXQuIEl0IHJlcXVpcmVzIHRo
ZSB1c2VyCisgICAgICAgICAgIGV4aXQgYW5kIHJlc3RhcnQgdGhlIHByb2Nlc3MgdG8gdGFrZSBl
ZmZlY3QuCisgICAgICAgIDIuIEl0IHBvcHVsYXRlcyBpdHNlbGYgZnJvbSB0aGUgZXhpc3Rpbmcg
cGxpc3QgZmlsZSAoaWYgaXQgZXhpc3RzKS4KKyAgICAgICAgMy4gSXQgc3RvcHMgdXNpbmcgdGhl
IHBsaXN0IGluIGZhdm9yIG9mIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgNC4gSXQgZG9lcyBxdWVy
aWVzIGFuZCBvdGhlciBvcGVyYXRpb25zIHVzaW5nIHRoZSBkYXRhYmFzZSBpbnN0ZWFkIG9mIHRo
ZSBvbGQgaGFzaCB0YWJsZQorICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBU
aGlzIHBhdGNoIHJlZmFjdG9ycyB0aGUgZXhpc2l0aW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZSBjbGFzcyBpbnRvIGEgYmFzZQorICAgICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUgY2xhc3MsIHdoaWNoIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSBp
cyBiYXNlZCBvbi4KKyAgICAgICAgSXQgYWRkcyBhIG5ldyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZSB0aGF0IGlzIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIFNRTAorICAgICAg
ICBvcGVyYXRpb25zLgorCisgICAgICAgIFRoZXNlIGNvZGUgY2hhbmdlcyBzaG91bGQgbm90IGhh
dmUgYW55IGltcGFjdCBvbiBleGlzdGluZyBvcGVyYXRpb25zLCBhbmQgd2hlbiBlbmFibGVkCisg
ICAgICAgIHNob3VsZCBwcm9kdWNlIHRoZSBzYW1lIHRlc3QgcmVzdWx0cy4KKworICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0
ZVNjaGVtYSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRPYnNlcnZlZERvbWFpbik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWxhdGlvbnNo
aXBFeGlzdHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1Eb21haW5Eb2Vz
Tm90RXhpc3QgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0
aW9uc2hpcHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZGF0YWJhc2VJc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNh
bGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENv
dW50Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGly
ZWN0ZWRUb1RoaXNEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpidWlsZExpc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bWFya0FzUHJl
dmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQpOgorICAgICAgICAoV2ViS2l0OjpsaXN0
VG9TdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjbGFzc2lmeVJlc291cmNl
cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3RvcmFnZUlmTmVlZGVkKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9y
YWdlSW1tZWRpYXRlbHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3Jh
Z2VBY2Nlc3NJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVu
dFJlc291cmNlc0ZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VM
b2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJ
bnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9tYWluc0FzUHJldmFsZW50KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50
UmVzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbSk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUHJpbWFyeURvbWFpbik6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcik6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb29raWVUcmVh
dG1lbnRGb3JPcmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFBy
b21wdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpkb21haW5zVG9CbG9jayBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVDb29r
aWVCbG9ja2luZ0ZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcm9jZXNz
U3RhdGlzdGljcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpwcmV2YWxlbnREb21haW5zIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmRFeHBpcmVkVXNlcklu
dGVyYWN0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRm
YXRoZXJpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRh
Rm9yKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFp
bnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzeW5jU3RvcmFnZUlmTmVlZGVkKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzeW5jU3RvcmFnZUlt
bWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6ZG9t
YWluc1RvU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
ZnJvbVdhbGxUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6
dG9kYXkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpzZWNvbmRz
U2luY2VFcG9jaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0Rh
dGU6Om9wZXJhdG9yPT0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRp
bmdEYXRlOjpvcGVyYXRvcjwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVy
YXRpbmdEYXRlOjpvcGVyYXRvcjw9IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6T3BlcmF0aW5nRGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
Om1lcmdlT3BlcmF0aW5nRGF0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0Ojpjb21wdXRl
SW1wb3J0YW5jZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U2hv
dWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNo
b3VsZFN1Ym1pdFRlbGVtZXRyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJz
aXRlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNjaGVkdWxlU3RhdGlzdGlj
c1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0
R3JhbmRmYXRoZXJpbmdUaW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRl
Q2FjaGVNYXhBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Ojp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJl
Y29yZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNsdWRl
VG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGly
ZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
bG9nVGVzdGluZ0V2ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcyk6IERlbGV0ZWQu
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUuaDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpkYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0RlYnVnTW9kZUVuYWJsZWQgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN0
b3JlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dERlYnVnTG9nZ2dpbmdFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6ZG9tYWluc1RvU3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKToKKyAgICAgICAgKFdl
YktpdDo6T3BlcmF0aW5nRGF0ZTo6dG9kYXkpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdE
YXRlOjpzZWNvbmRzU2luY2VFcG9jaCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGlu
Z0RhdGU6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRl
OjpvcGVyYXRvcjwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVy
YXRvcjw9IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbGN1bGF0ZUFu
ZFN1Ym1pdFRlbGVtZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y29tcHV0ZUltcG9ydGFuY2UpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJt
aXRUZWxlbWV0cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlbW92ZURhdGFSZWNvcmRzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5n
V2Vic2l0ZURhdGEpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVi
dWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlz
dGljc1Byb2Nlc3NpbmdSZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VDYXApOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VDYXBG
b3JDbGllbnRTaWRlQ29va2llcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRz
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckJsb2NraW5nU3Rh
dGVGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpwcm9jZXNzU3RhdGlzdGljcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RhdGlzdGljc0VwaXJhdGlvblRpbWUgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1lcmdlT3BlcmF0aW5n
RGF0ZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlu
Y2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3Rh
dGlzdGljc0VudHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dUZXN0aW5nRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92
ZUFsbFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaC4KKyAgICAgICAgKFdlYktpdDo6
T3BlcmF0aW5nRGF0ZTo6T3BlcmF0aW5nRGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNEZWJ1Z01vZGVFbmFibGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdG9yZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZCk6CisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5t
bTogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQpOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lm
eVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3Rh
dGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
cXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyZm9ybURhaWx5VGFza3Mp
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6bG9nV2ViU29ja2V0TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZVJl
ZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RT
ZWVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRo
ZXJlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
aXNHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJv
bSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2No
ZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZUZvckRvbWFp
bnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNj
aGVkdWxlQ2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNE
b3duVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDoKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtQcm9jZXNzOjppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNv
ZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmg6CisgICAgICAgICogUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllci5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UpOgorICAgICAgICAq
IFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaDoK
KyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9D
b2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
UG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHA6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisKIDIwMTktMDMtMDEgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFNlcmlhbGl6ZSBJbmRleGVkREI6Ok9iamVjdFN0b3JlT3ZlcndyaXRl
TW9kZSBhcyBhbiBlbnVtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVF
bmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oCmluZGV4IGE1ZTNhY2I3MTNiNDc4MzQxNmRjMTExYjIyZmYzZDA3OGExMDU3NWUuLmQw
ODgxOTg2OTIzZmQ2ZDM5NDM2M2VlMTY4MjI3ODkwODgwNjU5MzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBAIC0xNDgsNiArMTQ4LDkgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0SXRwRGVidWdNb2RlRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBt
X2l0cERlYnVnTW9kZSA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgaXRwRGVidWdNb2RlRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXRwRGVidWdNb2RlOyB9CiAKKyAgICB2b2lkIHNldElUUERh
dGFiYXNlRW5hYmxlZChib29sIGlzRW5hYmxlZCkgeyBtX2lzSVRQRGF0YWJhc2VFbmFibGVkID0g
aXNFbmFibGVkOyB9CisgICAgYm9vbCBpVFBEYXRhYmFzZUVuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2lzSVRQRGF0YWJhc2VFbmFibGVkOyB9CisKICAgICB2b2lkIHNldFJlc3RyaWN0ZWRIVFRQ
UmVzcG9uc2VBY2Nlc3MoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1Jlc3RyaWN0ZWRIVFRQUmVzcG9u
c2VBY2Nlc3MgPSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VB
Y2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX2lzUmVzdHJpY3RlZEhUVFBSZXNwb25zZUFjY2Vzczsg
fQogCkBAIC0zNTEsNyArMzU0LDcgQEAgcHVibGljOgogICAgIGJvb2wgbW91c2Vtb3ZlRXZlbnRI
YW5kbGluZ1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX21vdXNlbW92
ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkOyB9CiAgICAgdm9pZCBzZXRNb3Vz
ZW1vdmVFdmVudEhhbmRsaW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZChib29sIGlzRW5hYmxlZCkg
eyBtX21vdXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkID0gaXNFbmFi
bGVkOyB9CiAjZW5kaWYKLSAgICAKKwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzJiBzaGFyZWRGZWF0dXJlcygpOwogCiBwcml2YXRlOgpAQCAtNTM0LDYg
KzUzNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21vdXNlbW92ZUV2ZW50SGFuZGxpbmdQcmV2
ZW50c0RlZmF1bHRFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCisgICAgYm9vbCBtX2lzSVRQ
RGF0YWJhc2VFbmFibGVkIHsgZmFsc2UgfTsKKwogICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVy
RGVzdHJveWVkPFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAppbmRleCAzZTAzODI0ZTk2OTNhNDBjMmRi
NTE4YjYzZTdmOWVkOGY2N2Y4YmIzLi42ODhhMzU4MGExODYxN2NkMmZjZTNjZjJhNTdmZTc5ZDVi
ZjBmMGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2Uu
aApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCB0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQWxsVGFibGVzKCk7
Ci0gICAgaW50IHJ1blZhY3V1bUNvbW1hbmQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBpbnQgcnVu
VmFjdXVtQ29tbWFuZCgpOwogICAgIGludCBydW5JbmNyZW1lbnRhbFZhY3V1bUNvbW1hbmQoKTsK
ICAgICAKICAgICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNhY3Rpb25JblByb2dyZXNzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlU3RhdGVtZW50LmgKaW5kZXggYTE5M2Q4YzI0YjBiZDAyNDk2NWJiMTA1NDQ2NDIzYmJj
OGY1YmZlOS4uZjM2NmM3MzAyZjRiYTVhNWY0YWMxYTYxYzE2MjYzMzEzOTMyZDNkNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaApAQCAtNzYsNyAr
NzYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldENvbHVtbk5hbWUoaW50IGNvbCk7CiAgICAg
U1FMVmFsdWUgZ2V0Q29sdW1uVmFsdWUoaW50IGNvbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3Ry
aW5nIGdldENvbHVtblRleHQoaW50IGNvbCk7Ci0gICAgZG91YmxlIGdldENvbHVtbkRvdWJsZShp
bnQgY29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgZ2V0Q29sdW1uRG91YmxlKGludCBj
b2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBnZXRDb2x1bW5JbnQoaW50IGNvbCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgaW50NjRfdCBnZXRDb2x1bW5JbnQ2NChpbnQgY29sKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKGludCBjb2wpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTAzZGZiNzc0YjYzMGI2ZWNlYzY0NWRjMzFiNzI5ZmZiZDEzNDc4MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTAsMCArMSwxNTMzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFU
SVNUSUNTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9u
LmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5Q
cm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmUuaCIKKyNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCisjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0tl
eWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1l
bnQuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxM
T1dFRChzZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihzZXNzaW9uSUQuaXNBbHdh
eXNPbkxvZ2dpbmdBbGxvd2VkKCksIE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgUkVM
RUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xP
R19FUlJPUl9JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjoiIGZtdCwgdGhpcywg
IyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoc2Vz
c2lvbklELCBmbXQsIC4uLikgICgodm9pZCkwKQorI2RlZmluZSBSRUxFQVNFX0xPR19FUlJPUl9J
Rl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pICAoKHZvaWQpMCkKKyNlbmRpZgorCitjb25z
dGV4cHIgYXV0byBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkgPSAiU0VMRUNUIENPVU5UKCopIEZS
T00gT2JzZXJ2ZWREb21haW5zIl9zOworY29uc3RleHByIGF1dG8gaW5zZXJ0T2JzZXJ2ZWREb21h
aW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJlZ2lzdHJhYmxlRG9tYWlu
LCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCIKKyAgICAibW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBpc1ZlcnlQcmV2YWxlbnQs
IGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlcklu
dGVyYWN0aW9uLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFj
Y2Vzc0FQSSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KSJfczsKK2NvbnN0
ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wTGV2
ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Citjb25zdGV4cHIgYXV0byBkb21haW5JREZyb21TdHJp
bmdRdWVyeSA9ICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkgIgorICAgICJTRUxFQ1Qg
PywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
PT0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSA9
ICJJTlNFUlQgSU5UTyBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChzb3VyY2VEb21haW5JRCwg
dG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFpbklEID0gPyAiCisgICAg
IkFORCB0b0RvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5ID0gIklOU0VSVCBJTlRPIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCkgIgorICAgICJTRUxFQ1Qg
PywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
PSA/Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3Rz
UXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c0Zyb20gV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/ICIKKyAgICAiQU5EIGZyb21Eb21haW5J
RCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/KSkiX3M7Citjb25zdGV4cHIgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyAo
c3ViRnJhbWVEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkgIgorICAgICJTRUxFQ1QgPywgZG9t
YWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9z
OworY29uc3RleHByIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzUXVlcnkg
PSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/ICIKKyAgICAiQU5EIHRvcEZyYW1lRG9tYWlu
SUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBJTlRPIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnMgKHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQpICIKKyAgICAiU0VM
RUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9t
YWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucyAiCisgICAgIldIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/
IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSA9ICJJTlNFUlQgSU5UTyBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvIChzdWJyZXNvdXJjZURvbWFpbklELCB0b0RvbWFpbklEKSAiCisg
ICAgIlNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3Ry
YWJsZURvbWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUb0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gPyAiCisg
ICAgIkFORCB0b0RvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5ID0gIklOU0VSVCBJTlRPIFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSAoc3VicmVzb3VyY2VEb21haW5JRCwgZnJvbURvbWFpbklEKSAi
CisgICAgIlNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNGcm9tRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9
ID8gIgorICAgICJBTkQgZnJvbURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBh
dXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21h
aW5zIFNFVCBoYWRVc2VySW50ZXJhY3Rpb24gPSA/LCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9u
VGltZSA9ID8gIgorICAgICJXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4
cHIgYXV0byB1cGRhdGVMYXN0U2VlblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VU
IGxhc3RTZWVuID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIg
YXV0byB1cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citj
b25zdGV4cHIgYXV0byBpc1ByZXZhbGVudFJlc291cmNlUXVlcnkgPSAiU0VMRUNUIGlzUHJldmFs
ZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsK
K2NvbnN0ZXhwciBhdXRvIHVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzVmVyeVByZXZhbGVudCA9ID8gV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VR
dWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGNsZWFyUHJldmFsZW50
UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9
IDAsIGlzVmVyeVByZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOwor
Y29uc3RleHByIGF1dG8gaGFkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIGhhZFVzZXJJ
bnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdXBk
YXRlR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5k
ZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBh
dXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZhdGhlcmVkIEZST00gT2Jz
ZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBh
dXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZS
T00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlvbiA9IDEgQU5EIG1vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKKyAgICAKK1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1
ZSwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5UGF0aCkKKyAgICA6IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZShzdG9yZSwgd29ya1F1ZXVlKQorICAgICwgbV9zdG9yYWdlRGlyZWN0
b3J5UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0aCArICIvb2JzZXJ2YXRpb25zLmRiIikKKyAgICAs
IG1fb2JzZXJ2ZWREb21haW5Db3VudChtX2RhdGFiYXNlLCBvYnNlcnZlZERvbWFpbkNvdW50UXVl
cnkpCisgICAgLCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50KG1fZGF0YWJhc2UsIGlu
c2VydE9ic2VydmVkRG9tYWluUXVlcnkpCisgICAgLCBtX2luc2VydFRvcExldmVsRG9tYWluU3Rh
dGVtZW50KG1fZGF0YWJhc2UsIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkpCisgICAgLCBtX2Rv
bWFpbklERnJvbVN0cmluZ1N0YXRlbWVudChtX2RhdGFiYXNlLCBkb21haW5JREZyb21TdHJpbmdR
dWVyeSkKKyAgICAsIG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50
KG1fZGF0YWJhc2UsIHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5KQorICAg
ICwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKG1fZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9RdWVyeSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0
cyhtX2RhdGFiYXNlLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzUXVlcnkpCisgICAg
LCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbShtX2RhdGFiYXNlLCB0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb21RdWVyeSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
RXhpc3RzKG1fZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0c1F1ZXJ5
KQorICAgICwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zKG1fZGF0YWJhc2UsIHN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSkKKyAgICAsIG1fc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWluRXhpc3RzKG1fZGF0YWJhc2UsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4
aXN0c1F1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zKG1fZGF0
YWJhc2UsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSkKKyAgICAsIG1fc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzKG1fZGF0YWJhc2UsIHN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVy
eSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cyhtX2RhdGFiYXNl
LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzUXVlcnkpCisgICAgLCBtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbShtX2RhdGFiYXNlLCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb21RdWVyeSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9t
RXhpc3RzKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0c1F1
ZXJ5KQorICAgICwgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50KG1fZGF0YWJh
c2UsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVyeSkKKyAgICAsIG1fdXBkYXRlTGFzdFNl
ZW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXBkYXRlTGFzdFNlZW5RdWVyeSkKKyAgICAsIG1fdXBk
YXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXBkYXRlUHJldmFsZW50
UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2Rh
dGFiYXNlLCBpc1ByZXZhbGVudFJlc291cmNlUXVlcnkpCisgICAgLCBtX3VwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNlLCB1cGRhdGVWZXJ5UHJldmFsZW50UmVz
b3VyY2VRdWVyeSkKKyAgICAsIG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9k
YXRhYmFzZSwgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1fY2xlYXJQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNlLCBjbGVhclByZXZhbGVudFJlc291cmNl
UXVlcnkpCisgICAgLCBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudChtX2RhdGFiYXNlLCBo
YWRVc2VySW50ZXJhY3Rpb25RdWVyeSkKKyAgICAsIG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRl
bWVudChtX2RhdGFiYXNlLCB1cGRhdGVHcmFuZGZhdGhlcmVkUXVlcnkpCisgICAgLCBtX2lzR3Jh
bmRmYXRoZXJlZFN0YXRlbWVudChtX2RhdGFiYXNlLCBpc0dyYW5kZmF0aGVyZWRRdWVyeSkKKyAg
ICAsIG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQobV9kYXRhYmFzZSwgZmlu
ZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25RdWVyeSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRz
SWZOZWVkZWQoKTsKKyNlbmRpZgorCisgICAgdGhpcy0+d29ya1F1ZXVlKCktPmRpc3BhdGNoKFt0
aGlzLCBwYXRoID0gbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC5pc29sYXRlZENvcHkoKV0geworICAg
ICAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihwYXRoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBwYXRo
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgcGF0aC51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBTaW5jZSB3ZSBhcmUg
dXNpbmcgYSB3b3JrZXJRdWV1ZSwgdGhlIHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBi
ZSBjYWxsZWQgYnkgZGlmZmVyZW50IHRocmVhZHMuCisgICAgICAgIG1fZGF0YWJhc2UuZGlzYWJs
ZVRocmVhZGluZ0NoZWNrcygpOworCisgICAgICAgIGlmICghbV9kYXRhYmFzZS50YWJsZUV4aXN0
cygiT2JzZXJ2ZWREb21haW5zIikpIHsKKyAgICAgICAgICAgIGlmICghY3JlYXRlU2NoZW1hKCkp
IHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3JlYXRlU2NoZW1hIGZhaWxlZCwgZXJy
b3IgbWVzc2FnZTogJXtwdWJsaWN9cywgZGF0YWJhc2UgcGF0aDogJXtwdWJsaWN9cyIsIHRoaXMs
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCksIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFwcmVwYXJlU3RhdGVtZW50
cygpKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVudHMgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBwYXRoOiAle3B1YmxpY31zIiwg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLT53b3JrUXVldWUoKS0+ZGlzcGF0Y2hBZnRlcig1
X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgICAgICBpZiAod2Vha1Ro
aXMpCisgICAgICAgICAgICB3ZWFrVGhpcy0+Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7
CisgICAgfSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmlzRW1wdHkoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IAorICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgaWYgKG1fb2JzZXJ2ZWREb21haW5Db3Vu
dC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0ID0gbV9vYnNlcnZlZERvbWFp
bkNvdW50LmdldENvbHVtbkludCgwKSA/IGZhbHNlIDogdHJ1ZTsKKyAgICAKKyAgICBpbnQgcmVz
ZXRSZXN1bHQgPSBtX29ic2VydmVkRG9tYWluQ291bnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZU9ic2VydmVkRG9tYWluID0g
IkNSRUFURSBUQUJMRSBPYnNlcnZlZERvbWFpbnMgKCIKKyAgICAiZG9tYWluSUQgSU5URUdFUiBQ
UklNQVJZIEtFWSwgcmVnaXN0cmFibGVEb21haW4gVEVYVCBOT1QgTlVMTCBVTklRVUUgT04gQ09O
RkxJQ1QgRkFJTCwgbGFzdFNlZW4gUkVBTCBOT1QgTlVMTCwgIgorICAgICJoYWRVc2VySW50ZXJh
Y3Rpb24gSU5URUdFUiBOT1QgTlVMTCwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgUkVB
TCBOT1QgTlVMTCwgZ3JhbmRmYXRoZXJlZCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgImlzUHJl
dmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGlzVmVyeVByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxM
LCBkYXRhUmVjb3Jkc1JlbW92ZWQgSU5URUdFUiBOT1QgTlVMTCwiCisgICAgInRpbWVzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCB0aW1l
c0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJIElOVEVHRVIgTk9UIE5V
TEwpOyJfczsKKworY29uc3RleHByIGF1dG8gY3JlYXRlVG9wTGV2ZWxEb21haW5zID0gIkNSRUFU
RSBUQUJMRSBUb3BMZXZlbERvbWFpbnMgKCIKKyAgICAidG9wTGV2ZWxEb21haW5JRCBJTlRFR0VS
IFBSSU1BUlkgS0VZLCBDT05TVFJBSU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkodG9wTGV2ZWxE
b21haW5JRCkgIgorICAgICJSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04g
REVMRVRFIENBU0NBREUpOyJfczsKKworY29uc3RleHByIGF1dG8gY3JlYXRlU3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnMgKCIKKyAgICAiZG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wTGV2
ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsICIKKyAgICAiQ09O
U1RSQUlOVCBma0RvbWFpbklEIEZPUkVJR04gS0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2Vy
dmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBL
RVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxE
b21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyI7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG8gKCIKKyAgICAic291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21h
aW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHNvdXJjZURvbWFpbklE
KSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExl
dmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7IjsKKworY29u
c3RleHByIGF1dG8gY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBU
QUJMRSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gKCIKKyAgICAidGFyZ2V0RG9tYWluSUQg
SU5URUdFUiBOT1QgTlVMTCwgZnJvbURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAi
Rk9SRUlHTiBLRVkodGFyZ2V0RG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRv
cExldmVsRG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKGZy
b21Eb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkg
T04gREVMRVRFIENBU0NBREUpOyI7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnMgPSAiQ1JFQVRFIFRBQkxFIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnMgKCIKKyAgICAic3ViRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b3BGcmFt
ZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3ViRnJhbWVE
b21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBD
QVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKHRvcEZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMg
VG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiOwor
Citjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zID0g
IkNSRUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCisgICAgInN1
YnJlc291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRF
R0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJF
RkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgor
ICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9t
YWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7IjsKKworY29uc3RleHBy
IGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9ICJDUkVBVEUgVEFCTEUg
U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklE
IElOVEVHRVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJG
T1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlu
cyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9Eb21h
aW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVND
QURFKTsiOworCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoIgor
ICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJ
TlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQp
IFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwg
IgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21h
aW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7IjsKKyAgICAKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlT2JzZXJ2ZWREb21haW4pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90
IGNyZWF0ZSBPYnNlcnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9k
YXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlVG9wTGV2ZWxEb21haW5zKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBjcmVhdGUgVG9wTGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1f
ZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21t
YW5kKGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigp
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBt
X2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29t
bWFuZChjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB7CisgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUg
aW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFz
ZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRh
YmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQo
Y3JlYXRlU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFi
bGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9k
YXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgeworICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRh
YmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAgICAgCisgICAgaWYgKG1fb2JzZXJ2ZWREb21haW5Db3VudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydFRvcExldmVsRG9tYWlu
U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9kb21haW5JREZy
b21TdHJpbmdTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0
cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMucHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9z
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20ucHJl
cGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbUV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRl
TGFzdFNlZW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2lzVmVy
eVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2lzR3JhbmRmYXRoZXJlZFN0YXRl
bWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fZmluZEV4cGlyZWRVc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICApIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzIGZhaWxlZCB0byBwcmVwYXJl
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIGxvYWRTdGF0aXN0aWNzKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBB
U1NFUlQoY29uZmlybURvbWFpbkRvZXNOb3RFeGlzdChsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJs
ZURvbWFpbikpOworI2VuZGlmCisKKyAgICBpZiAobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRl
bWVudC5iaW5kVGV4dCgxLCBsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURvbWFpbi5zdHJpbmco
KSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQuYmluZERvdWJsZSgyLCBsb2FkU3RhdGlzdGljcy5sYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LmJpbmRJbnQoMywgbG9hZFN0YXRpc3RpY3MuaGFkVXNlckludGVyYWN0aW9u
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVu
dC5iaW5kRG91YmxlKDQsIGxvYWRTdGF0aXN0aWNzLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg1LCBsb2FkU3RhdGlzdGlj
cy5ncmFuZGZhdGhlcmVkKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZl
ZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDYsIGxvYWRTdGF0aXN0aWNzLmlzUHJldmFsZW50UmVz
b3VyY2UpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3Rh
dGVtZW50LmJpbmRJbnQoNywgbG9hZFN0YXRpc3RpY3MuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Up
ICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50
LmJpbmRJbnQoOCwgbG9hZFN0YXRpc3RpY3MuZGF0YVJlY29yZHNSZW1vdmVkKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDks
IGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1VzZXJJbnRlcmFj
dGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0
ZW1lbnQuYmluZEludCgxMCwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbnNlcnRPYnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRv
IGNvbW1pdCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCByZXNldFJlc3VsdCA9IG1faW5zZXJ0T2JzZXJ2
ZWREb21haW5TdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0
LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlbGF0aW9uc2hpcEV4aXN0
cyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHN0YXRlbWVudCwgdW5zaWduZWQgZmlyc3REb21h
aW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3QKK3sKKyAg
ICBpZiAoc3RhdGVtZW50LmJpbmRJbnQoMSwgZmlyc3REb21haW5JRCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IHN0YXRlbWVudC5iaW5kVGV4dCgyLCBzZWNvbmREb21haW4uc3RyaW5nKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6Om1faW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwU3RhdGVtZW50
IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVzdWx0ID0gc3RhdGVt
ZW50LmdldENvbHVtbkludCgwKSA/IHRydWUgOiBmYWxzZTsKKworICAgIGludCByZXNldFJlc3Vs
dCA9IHN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJl
c2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50LCB1bnNpZ25lZCBk
b21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lKQoreworICAgIGlmIChz
dGF0ZW1lbnQuYmluZEludCgxLCBkb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0
YXRlbWVudC5iaW5kVGV4dCgyLCB0b3BGcmFtZS5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IHN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om1faW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwU3RhdGVtZW50IGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaW50IHJlc2V0UmVzdWx0ID0gc3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmbmRlZiBOREVCVUcKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3Qo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBpZiAobV9kb21h
aW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBT
UUxJVEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1Eb21haW5Eb2VzTm90RXhp
c3QgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIGlmIChtX2RvbWFpbklE
RnJvbVN0cmluZ1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICBpbnQg
cmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5yZXNldCgpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0sp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHJlc2V0UmVzdWx0ID0g
bV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVy
biB0cnVlOworfQorI2VuZGlmCisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25z
dAoreworICAgIHVuc2lnbmVkIGRvbWFpbklEID0gMDsKKworICAgIGlmIChtX2RvbWFpbklERnJv
bVN0cmluZ1N0YXRlbWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZhaWxl
ZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGRv
bWFpbklEOworICAgIH0KKworICAgIGRvbWFpbklEID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5J
REZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVz
dWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiBkb21haW5J
RDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiBsb2FkU3RhdGlzdGljcykKK3sKKyAgICBhdXRvIHJlZ2lzdHJhYmxlRG9tYWluSUQgPSBkb21h
aW5JRChsb2FkU3RhdGlzdGljcy5yZWdpc3RyYWJsZURvbWFpbik7CisgICAgZm9yIChhdXRvJiB0
b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1l
RG9tYWlucykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LCByZWdpc3RyYWJsZURvbWFpbklELCB0b3BG
cmFtZURvbWFpbik7CisKKyAgICBmb3IgKGF1dG8mIHRvRG9tYWluIDogbG9hZFN0YXRpc3RpY3Mu
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRCwgdG9E
b21haW4pOworICAgIAorICAgIGZvciAoYXV0byYgZnJvbURvbWFpbiA6IGxvYWRTdGF0aXN0aWNz
LnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSkKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklE
LCBmcm9tRG9tYWluKTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9h
ZFN0YXRpc3RpY3Muc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0
cmFibGVEb21haW5JRCwgdG9wRnJhbWVEb21haW4pOworICAgIAorICAgIGZvciAoYXV0byYgdG9w
RnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21h
aW5zKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELCB0b3BGcmFtZURvbWFpbik7Cisg
ICAgCisgICAgZm9yIChhdXRvJiB0b0RvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG8pCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvRG9tYWlu
KTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGZyb21Eb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVnaXN0cmFibGVEb21haW5J
RCwgZnJvbURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZSYgbWVtb3J5U3RvcmUpCit7CisgICAgd29ya1F1ZXVlKCktPmRpc3BhdGNo
KFt0aGlzLCB3ZWFrTWVtb3J5U3RvcmUgPSBtYWtlV2Vha1B0cihtZW1vcnlTdG9yZSldIHsKKyAg
ICAgICAgaWYgKCF3ZWFrTWVtb3J5U3RvcmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKCFpc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byYg
c3RhdGlzdGljc01hcCA9IHdlYWtNZW1vcnlTdG9yZS0+ZGF0YSgpOworICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0YXRpc3RpYyA6IHN0YXRpc3RpY3NNYXApCisgICAgICAgICAgICBpbnNlcnRP
YnNlcnZlZERvbWFpbihzdGF0aXN0aWMudmFsdWUpOworCisgICAgICAgIC8vIE1ha2UgYSBzZXBh
cmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRpb25zaGlwcyBzbyB3ZQorICAgICAgICAv
LyBjYW4gcmVmZXIgdG8gdGhlIE9ic2VydmVkRG9tYWluIHRhYmxlIGVudHJpZXMKKyAgICAgICAg
Zm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwKQorICAgICAgICAgICAgaW5zZXJ0
RG9tYWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMudmFsdWUpOworCisgICAgICAgIG1fZGF0YWJh
c2UucnVuVmFjdXVtQ29tbWFuZCgpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25z
dAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUUoMTk1
MDg4KTogSW1wbGVtZW50IGZvciBEYXRhYmFzZSB2ZXJzaW9uLgorfQorCitzdGF0aWMgU3RyaW5n
IGRvbWFpbnNUb1N0cmluZyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
cykKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvIGRvbWFpbk5h
bWUgOiBkb21haW5zKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCciJyk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbk5hbWUuc3RyaW5nKCkpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgIH0KKworICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFi
bGVEb21haW4+JiYgZG9tYWlucykKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRhdGFSZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUg
cmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwgIikiKSk7
CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFN0YXRpc3RpY3NGb3JEb21haW5z
IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFz
dEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVs
eUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWdu
ZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVj
dGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobnVtYmVyT2ZSZWN1cnNpdmVDYWxs
cyA+PSBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjaykgeworICAg
ICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiSGl0ICV1IHJlY3Vyc2l2
ZSBjYWxscyBpbiByZWRpcmVjdCBiYWNrdHJhY2UuIFJldHVybmluZyBlYXJseS4iLCBtYXhOdW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjayk7CisgICAgICAgIHJldHVybiBu
dW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworICAgIH0KKyAgICAKKyAgICArK251bWJlck9mUmVjdXJz
aXZlQ2FsbHM7CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+IG5ld2x5SWRlbnRpZmllZERvbWFpbnM7
CisgICAgU1FMaXRlU3RhdGVtZW50IGZpbmRTdWJyZXNvdXJjZXMobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQg
ZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERv
bWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEID0gIiwgU3Ry
aW5nOjpudW1iZXIocHJpbWFyeURvbWFpbklEKSwgIkFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2
YWxlbnQgPSAwIikpOworICAgIGlmIChmaW5kU3VicmVzb3VyY2VzLnByZXBhcmUoKSA9PSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgd2hpbGUgKGZpbmRTdWJyZXNvdXJjZXMuc3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3RG9tYWluID0gZmluZFN1YnJlc291cmNlcy5n
ZXRDb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZh
bGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3RG9tYWluKTsKKyAgICAgICAgICAgIGlm
IChpbnNlcnRSZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgICAgIG5ld2x5SWRlbnRpZmllZERv
bWFpbnMuaW5zZXJ0KG5ld0RvbWFpbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTUUxpdGVT
dGF0ZW1lbnQgZmluZFRvcEZyYW1lcyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9ic2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFp
bnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdI
RVJFIHRhcmdldERvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIocHJpbWFyeURvbWFpbklEKSwg
IkFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIikpOworICAgIGlmIChmaW5kVG9w
RnJhbWVzLnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKKyAgICAgICAgd2hpbGUgKGZpbmRUb3BG
cmFtZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3RG9tYWlu
ID0gZmluZFRvcEZyYW1lcy5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBhdXRvIGluc2Vy
dFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3RG9tYWlu
KTsKKyAgICAgICAgICAgIGlmIChpbnNlcnRSZXN1bHQuc2Vjb25kKQorICAgICAgICAgICAgICAg
IG5ld2x5SWRlbnRpZmllZERvbWFpbnMuaW5zZXJ0KG5ld0RvbWFpbik7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobmV3bHlJZGVudGlmaWVkRG9tYWlucy5lbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKKworICAgIGZvciAoYXV0byBkb21haW5JRCA6
IG5ld2x5SWRlbnRpZmllZERvbWFpbnMpCisgICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMg
PSByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNE
b21haW4oZG9tYWluSUQsIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgbnVtYmVyT2ZS
ZWN1cnNpdmVDYWxscyk7CisKKyAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKK30K
KwordGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRM
aXN0KGNvbnN0IFdURjo6SXRlcmF0b3JSYW5nZTxJdGVyYXRvclR5cGU+JiB2YWx1ZXMpCit7Cisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byBkb21haW5JRCA6IHZhbHVl
cykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihkb21h
aW5JRCk7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFz
UmVkaXJlY3RlZFRvUHJldmFsZW50KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIFN0ZFNldDx1bnNpZ25lZD4gcHJldmFsZW50RHVlVG9SZWRpcmVjdDsKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAi
U0VMRUNUIERJU1RJTkNUIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3VicmVzb3VyY2VE
b21haW5JRCBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERv
bWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9z
KTsKKyAgICBpZiAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
SVRFX09LKSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnN0
ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5p
bnNlcnQoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAg
IH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50KG1fZGF0
YWJhc2UsICJTRUxFQ1QgRElTVElOQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VE
b21haW5JRCBGUk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFp
bnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
by50b0RvbWFpbklEIEFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAg
ICBpZiAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7
CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJ
VEVfUk9XKQorICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJh
bWVSZWRpcmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0
ZVN0YXRlbWVudCBtYXJrUHJldmFsZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5J
RCBJTiAoIiwgYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+Ojpp
dGVyYXRvcj4ocHJldmFsZW50RHVlVG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1Jl
ZGlyZWN0LmVuZCgpKSksICIpIikpOworICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZh
bGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBt
ZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworSGFzaE1hcDx1bnNpZ25l
ZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXM+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVy
eVByZXZhbGVudFJlc291cmNlcygpCit7CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVBy
ZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWluSUQs
IHJlZ2lzdHJhYmxlRG9tYWluLCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVS
RSBpc1ZlcnlQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAobm90VmVyeVByZXZhbGVudFJlc291
cmNlc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChu
b3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBrZXkgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obm90VmVy
eVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAg
ICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJhYmxlRG9tYWluOjp1
bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcobm90VmVyeVByZXZhbGVu
dFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgICAgICwg
bm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMikgPyBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93Cisg
ICAgICAgICAgICAgICAgLCAwLCAwLCAwLCAwIH0pOworICAgICAgICAgICAgcmVzdWx0cy5hZGQo
a2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXI7CisgICAgZm9yIChhdXRvIHZhbHVlIDogcmVzdWx0cy5rZXlzKCkpIHsKKyAgICAgICAgaWYg
KCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
LCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodmFsdWUpOworICAgIH0KKworICAg
IGF1dG8gZG9tYWluSURzT2ZJbnRlcmVzdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKworICAgIFNR
TGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50KG1f
ZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFpbklELCBDT1VOVCh0
b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hF
UkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JP
VVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAg
IHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdHMuZmluZChk
b21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMuZW5kKCkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAgfQorCisgICAg
U1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVu
dChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09V
TlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZ
IHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdo
aWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQo
ZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAgfQorCisgICAg
U1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVu
dChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VEb21haW5JRCwgQ09V
TlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
IFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3QsICIp
IEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQu
c3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0
YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1
bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVu
ZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0
YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNlRG9tYWluSUQsIENP
VU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3Vy
Y2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JPVVAgQlkgc291cmNl
RG9tYWluSUQiKSk7CisgICAgaWYgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRl
bWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlICh0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAg
ICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+
dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
MSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMo
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBub3RWZXJ5
UHJldmFsZW50UmVzb3VyY2VzID0gZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKwor
ICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBub3RWZXJ5UHJldmFsZW50UmVzb3Vy
Y2VzLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IGNsYXNzaWZpZXIo
KS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJU
b3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsKKyAgICAgICAgaWYg
KG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5jZSkKKyAgICAgICAg
ICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdGVyYWJsZURv
bWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpCit7CisgICAg
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgbWFya0FzUHJldmFs
ZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKKyAgICByZWNsYXNzaWZ5UmVzb3VyY2Vz
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNT
dG9yYWdlSWZOZWVkZWQoKQoreworICAgIG1fZGF0YWJhc2UucnVuVmFjdXVtQ29tbWFuZCgpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3RvcmFn
ZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBtX2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFj
Y2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlE
IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAg
IHN3aXRjaCAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAg
IGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOgorICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRy
ZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwOgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0
cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpB
bGxvdzoKKyAgICAgICAgLy8gRG8gbm90aGluZworICAgICAgICBicmVhazsKKyAgICB9OworCisg
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHN1
YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9t
YWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHN1YkZy
YW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIFtzdG9y
ZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJl
cXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZy
YW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJhbWVJRCwgUGFnZUlEIHBhZ2VJ
RCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nl
c3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIHN3aXRj
aCAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAgIGNhc2Ug
Q29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOiB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBp
dHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFz
IG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1l
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5k
S2VlcDogeworICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQo
KSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBzdG9yYWdl
IGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBp
biB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6
SGFzQWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVU
cmVhdG1lbnRSZXN1bHQ6OkFsbG93OgorICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIGJy
ZWFrOworICAgIH07CisKKyAgICBhdXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBwcm9tcHRF
bmFibGVkICYmIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJh
bWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKHByb21wdEVuYWJsZWQg
JiYgIXVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19J
RihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFi
b3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFj
Y2VzcyB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMgb3Igbm90LiIsIHN1YkZyYW1lRG9t
YWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVz
OjpSZXF1aXJlc1VzZXJQcm9tcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpCisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVi
dWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdl
IGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMuIiwgc3Vi
RnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVtZW50U3RvcmFn
ZUFjY2VzcyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWlu
SUQgPSAiLCBTdHJpbmc6Om51bWJlcihzdWJGcmFtZVN0YXR1cy5zZWNvbmQpKSk7CisgICAgaWYg
KGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8
fCBpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBncmFudFN0b3JhZ2VBY2Nl
c3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFp
biksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkRWFybGllciwgW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChib29sIHdhc0dyYW50ZWRBY2Nl
c3MpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNz
ID8gU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6
Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBP
cGVuZXJQYWdlSUQgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJiBvcGVuZXJEb21haW4pCit7
CisgICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVuZXJEb21haW4p
OworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJEb21haW4pCisgICAgICAgIHJldHVybjsKKworICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2Vzcyk7CisKKyAgICBpZiAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKGRv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcykgIT0gQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxv
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dp
bmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29t
YmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31z
IHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9u
IGluIHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0
b3JhZ2VBY2Nlc3MpLCBXVEZNb3ZlKG9wZW5lckRvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVy
UGFnZUlELCBmYWxzZSwgW10oYm9vbCkgeyB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYg
c3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXNlcldhc1Byb21wdGVkTm93KSB7
CisgICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJG
cmFtZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOworICAgICAgICBBU1NFUlQoaGFz
SGFkVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluKSk7CisgICAgICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVu
dCwgc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgfQorCisgICAg
Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1v
dmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURv
bWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBP
cHRpb25hbDxGcmFtZUlEPiBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBib29sIHVzZXJXYXNQcm9t
cHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFj
aykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzdWJGcmFt
ZURvbWFpbiA9PSB0b3BGcmFtZURvbWFpbikgeworICAgICAgICBjYWxsYmFjayh0cnVlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9zdG9yYWdlQWNj
ZXNzUHJvbXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdlciBleHBlcmlt
ZW50YWwuCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBzdG9yYWdlQWNj
ZXNzUHJvbXB0c0VuYWJsZWQoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYXV0byBzdWJG
cmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHN1YkZyYW1lRG9tYWluKTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09
IEFkZGVkUmVjb3JkOjpObyk7CisgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24o
c3ViRnJhbWVEb21haW4pKTsKKyAgICAgICAgQVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFj
Y2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikp
OworI2VuZGlmCisgICAgICAgIHNldFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdHJ1
ZSwgV2FsbFRpbWU6Om5vdygpKTsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3N1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZy
YW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJ
RCwgc3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRs
ZXIoc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKV0oYm9vbCB2
YWx1ZSkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlz
cGF0Y2goW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHZhbHVlXSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSk7CisKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBk
YXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBk
b21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJs
aWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpCit7CisgICAgaWYgKCFkZWJ1Z01vZGVFbmFibGVkKCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHByaW1hcnlEb21h
aW5zVG9CbG9jazsKKyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSgyKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CisgICAgc2V0UHJldmFsZW50UmVz
b3VyY2UoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlOjpIaWdoKTsKKyAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRl
YnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CisKKyAgICBpZiAoIWRlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgp
KTsKKyAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNv
dXJjZSgpLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICAgICAgcHJpbWFyeURv
bWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNl
KCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
ZywgIkRpZCBzZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJw
b3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHByaW1hcnlEb21h
aW5zVG9CbG9jazsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21h
aW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZy
YW1lKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYm9vbCBhcmVU
YXJnZXRBbmRUb3BGcmFtZURvbWFpbnNTYW1lU2l0ZSA9IHRhcmdldERvbWFpbiA9PSB0b3BGcmFt
ZURvbWFpbjsKKyAgICBib29sIGFyZVRhcmdldEFuZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSA9IHRh
cmdldERvbWFpbiA9PSBzb3VyY2VEb21haW47CisKKyAgICBib29sIHN0YXRpc3RpY3NXZXJlVXBk
YXRlZCA9IGZhbHNlOworICAgIGlmICghaXNNYWluRnJhbWUgJiYgIShhcmVUYXJnZXRBbmRUb3BG
cmFtZURvbWFpbnNTYW1lU2l0ZSB8fCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUp
KSB7CisgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAgICAgdXBkYXRlTGFzdFNl
ZW4odGFyZ2V0RG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOjpyZWR1Y2VUaW1lUmVzb2x1
dGlvbihXYWxsVGltZTo6bm93KCkpKTsKKworICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0
cyhtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cywgdGFyZ2V0UmVzdWx0LnNlY29u
ZCwgdG9wRnJhbWVEb21haW4pKSB7CisgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXAobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCB0
b3BGcmFtZURvbWFpbik7CisgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzUmVkaXJlY3QgJiYgIWFyZVRhcmdldEFu
ZFNvdXJjZURvbWFpbnNTYW1lU2l0ZSkgeworICAgICAgICBpZiAoaXNNYWluRnJhbWUpIHsKKyAg
ICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOworICAgICAgICAgICAg
aWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3Rz
LCByZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbikpIHsKKyAgICAg
ICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvLCByZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbik7Cisg
ICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOworICAgICAgICAgICAgaWYg
KCFyZWxhdGlvbnNoaXBFeGlzdHMobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMs
IHRhcmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbikpIHsKKyAgICAgICAgICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHRh
cmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbik7CisgICAgICAgICAgICAgICAgc3RhdGlz
dGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGF1dG8gcmVkaXJlY3RpbmdEb21haW5SZXN1bHQgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VEb21haW4pOworICAgICAgICAg
ICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
RXhpc3RzLCByZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbikpIHsK
KyAgICAgICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLCByZWRpcmVjdGluZ0RvbWFpblJlc3VsdC5zZWNvbmQsIHRhcmdldERv
bWFpbik7CisgICAgICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOworICAgICAg
ICAgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c0Zyb21FeGlzdHMsIHRhcmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbikpIHsKKyAgICAg
ICAgICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20sIHRhcmdldFJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbik7CisgICAgICAg
ICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChzdGF0aXN0aWNzV2VyZVVwZGF0ZWQpCisgICAgICAg
IHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VM
b2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZy
YW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4pCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgdXBk
YXRlTGFzdFNlZW4odGFyZ2V0RG9tYWluLCBsYXN0U2Vlbik7CisKKyAgICBhdXRvIHRhcmdldERv
bWFpbklEID0gcmVzdWx0LnNlY29uZDsKKyAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cywgdGFyZ2V0RG9tYWluSUQsIHRvcEZy
YW1lRG9tYWluKSkgeworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCB0YXJnZXREb21haW5JRCwgdG9wRnJhbWVEb21haW4p
OworICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5
KCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiBzb3Vy
Y2VEb21haW4sIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgdGFyZ2V0RG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBzb3VyY2VEb21haW5SZXN1
bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzb3VyY2VE
b21haW4pOworICAgIGF1dG8gdGFyZ2V0RG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKworICAgIGJvb2wgaXNO
ZXdSZWRpcmVjdFRvRW50cnkgPSBmYWxzZTsKKyAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyht
X3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMsIHNvdXJjZURvbWFpblJlc3VsdC5z
ZWNvbmQsIHRhcmdldERvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
KG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbywgc291cmNlRG9tYWluUmVzdWx0LnNlY29u
ZCwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgaXNOZXdSZWRpcmVjdFRvRW50cnkgPSB0cnVlOwor
ICAgIH0KKworICAgIGJvb2wgaXNOZXdSZWRpcmVjdEZyb21FbnRyeSA9IGZhbHNlOworICAgIGlm
ICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhp
c3RzLCB0YXJnZXREb21haW5SZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pKSB7CisgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bSwgdGFyZ2V0RG9tYWluUmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKTsKKyAgICAgICAgaXNO
ZXdSZWRpcmVjdEZyb21FbnRyeSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGlzTmV3UmVkaXJl
Y3RUb0VudHJ5IHx8IGlzTmV3UmVkaXJlY3RGcm9tRW50cnkpCisgICAgICAgIHNjaGVkdWxlU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiBkb21haW4sIGJvb2wgaGFkVXNlckludGVyYWN0aW9uLCBXYWxsVGlt
ZSBtb3N0UmVjZW50SW50ZXJhY3Rpb24pCit7CisgICAgaWYgKG1fbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblN0YXRlbWVudC5iaW5kSW50KDEsIGhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAg
fHwgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmREb3VibGUoMiwgbW9z
dFJlY2VudEludGVyYWN0aW9uLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5iaW5k
VGV4dCgzLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RS
ZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24sIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcmVz
ZXRSZXN1bHQgPSBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucmVzZXQoKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0sp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwg
dHJ1ZSwgV2FsbFRpbWU6Om5vdygpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1
dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oZG9tYWluKTsKKyAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9
KTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2Us
IG1ha2VTdHJpbmcoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlu
cyBXSEVSRSBkb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHRhcmdldFJlc3VsdC5zZWNvbmQp
KSk7CisgICAgaWYgKHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCByZW1vdmVTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIGZhaWxlZCB0byBiaW5kLCBl
cnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2co
KSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAobV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZFRl
eHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9oYWRVc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJy
b3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gbV9oYWRVc2VySW50ZXJhY3Rp
b25TdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gdHJ1ZSA6IGZhbHNlOworICAgIGlmICghaGFk
VXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2FsbFRp
bWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29u
ZHMobV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDEpKTsKKwor
ICAgIGlmIChoYXNTdGF0aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSkpIHsKKyAgICAgICAgLy8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ugd2Ug
bm8gbG9uZ2VyIG5lZWQgaXQuCisgICAgICAgIC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0aGF0
IHN0YXRpc3RpY3MgbWVyZ2Ugd2lsbCBrbm93CisgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0
IGFzIG9wcG9zZWQgdG8gaXRzIGRlZmF1bHQgLTEuCisgICAgICAgIGNsZWFyVXNlckludGVyYWN0
aW9uKGRvbWFpbik7CisgICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gaGFkVXNlckludGVyYWN0aW9uOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZh
bGVuY2UpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV91
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50KDEsIDEpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0
KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjptX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNl
U3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRS
ZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIGlmIChuZXdQcmV2YWxlbmNlID09IFJlc291cmNl
TG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKSB7CisgICAgICAgIGlmIChtX3VwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQo
MiwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IG1fdXBkYXRl
VmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzZXRSZXN1bHQg
PSBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5yZXNldCgpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOwor
ICAgIH0KKworICAgIFN0ZFNldDx1bnNpZ25lZD4gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzOworICAgIHJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3Rl
ZFRvVGhpc0RvbWFpbihkb21haW5JRChkb21haW4pLCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNv
dXJjZXMsIDApOworICAgIHNldERvbWFpbnNBc1ByZXZhbGVudChXVEZNb3ZlKG5vblByZXZhbGVu
dFJlZGlyZWN0aW9uU291cmNlcykpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRv
bWFpbnMpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudCht
X2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZh
bGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFu
Z2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KGRvbWFpbnMuYmVnaW4oKSwgZG9tYWlucy5l
bmQoKSkpLCAiKSIpKTsKKyAgICBpZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9tYWluc0FzUHJl
dmFsZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKworU3RyaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRSgxOTUwODgpOiBJbXBsZW1l
bnQgU1FMaXRlLWJhc2VkIGR1bXBpbmcgcm91dGluZXMuCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KDApOworICAgIHJldHVybiB7IH07Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNRTGl0ZVN0YXRl
bWVudCYgcHJlZGljYXRlU3RhdGVtZW50LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIGlm
IChwcmVkaWNhdGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgcHJlZGljYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9O
RSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gZmFpbGVk
IHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9IHByZWRpY2F0ZVN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7CisgICAgaW50IHJlc2V0UmVzdWx0ID0g
cHJlZGljYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3Vs
dCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiti
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZhbGVudFJlc291
cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVGb3JEb21h
aW4obV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCBkb21haW4pOworfQorCitib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9yRG9tYWlu
KG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVz
b3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlzdHMobV9z
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIGRvbWFpbklEKHN1YnJlc291cmNl
RG9tYWluKSwgdG9wRnJhbWVEb21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJh
bWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBy
ZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhp
c3RzLCBkb21haW5JRChzdWJGcmFtZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFp
biwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcmVsYXRpb25z
aGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cywgZG9tYWluSUQo
cmVkaXJlY3RlZEZyb21Eb21haW4pLCByZWRpcmVjdGVkVG9Eb21haW4pOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihkb21haW4pOworICAgIAorICAgIGlmIChtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZSwgZXJy
b3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3Vs
dCA9PSBTUUxJVEVfT0spOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4s
IGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAg
IAorICAgIGlmIChtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQuYmluZEludCgxLCB2YWx1
ZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5kLCBlcnJv
ciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVu
dC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09
IFNRTElURV9PSyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25z
dAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHByZWRp
Y2F0ZVZhbHVlRm9yRG9tYWluKG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50LCBkb21haW4pOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWlu
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIC8vIEZv
ciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkg
Zm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlc3VsdC5zZWNvbmQs
IHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291
cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZy
YW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0
byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihz
dWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3
ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4K
KyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFt
ZURvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zLCByZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21h
aW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOworCisgICAg
Ly8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBl
bnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnREb21h
aW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCByZXN1bHQuc2Vj
b25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFp
bihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3Vy
ZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWlu
LgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGly
ZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4pOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25z
dCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIC8vIEZvciBjb25z
aXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRo
ZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3RE
b21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJh
bWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOworCisg
ICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGlj
cyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnRE
b21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJlc3VsdC5z
ZWNvbmQsIHJlZGlyZWN0RG9tYWluKTsKK30KKworc3RkOjpwYWlyPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgdW5zaWduZWQ+IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3Rh
dGVtZW50LmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1
YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIDAgfTsK
KyAgICB9CisgICAgCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gbV9kb21haW5J
REZyb21TdHJpbmdTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgICAgIGludCByZXNl
dFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cisg
ICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgZG9tYWluSUQgfTsKKyAgICB9CisKKyAg
ICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5yZXNldCgp
OworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9P
Syk7CisKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG5ld09ic2VydmF0aW9uKGRvbWFpbik7
CisgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4obmV3T2JzZXJ2YXRpb24pOworCisgICAgcmV0dXJu
IHsgQWRkZWRSZWNvcmQ6OlllcywgZG9tYWluSUQoZG9tYWluKSB9OworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBvcGVyYXRpbmdEYXRlcygpLmNsZWFyKCk7CisKKyAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKworICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNrQWdn
cmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CisKKyAgICBhdXRv
IHByaW1hcnlEb21haW5zVG9CbG9jayA9IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVn
TW9kZSgpOworICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhwcmltYXJ5RG9tYWlu
c1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJl
ZigpXSB7IH0pOworfQorCitSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Q29v
a2llVHJlYXRtZW50UmVzdWx0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
b29raWVUcmVhdG1lbnRGb3JPcmlnaW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikg
Y29uc3QKK3sKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIlNFTEVDVCBpc1ByZXZhbGVudCwgaGFkVXNlckludGVyYWN0aW9uIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gIiwgZG9tYWluLnN0cmluZygpKSk7
CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0
YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXR1cm4gQ29va2llVHJl
YXRtZW50UmVzdWx0OjpBbGxvdzsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ByZXZhbGVudCA9
IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7CisgICAgaWYgKCFpc1By
ZXZhbGVudCkKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c7CisK
KyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkg
PyB0cnVlIDogZmFsc2U7CisgICAgcmV0dXJuIGhhZFVzZXJJbnRlcmFjdGlvbiA/IENvb2tpZVRy
ZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwIDogQ29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9j
a0FuZFB1cmdlOworfQorICAgIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCh1bnNpZ25lZCBy
ZXF1ZXN0aW5nRG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBmaXJzdFBhcnR5RG9t
YWluKSBjb25zdAoreworICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9IGRvbWFp
bklEKGZpcnN0UGFydHlEb21haW4pOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcihy
ZXF1ZXN0aW5nRG9tYWluSUQpLCAiIEFORCB0b3BMZXZlbERvbWFpbklEID0gIiwgU3RyaW5nOjpu
dW1iZXIoZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkpKTsKKyAgICBpZiAoc3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3RhdGVtZW50Lmdl
dENvbHVtbkludCgwKSA/IGZhbHNlIDogdHJ1ZTsKK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2so
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZXN1bHRzOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1l
bnQobV9kYXRhYmFzZSwgIlNFTEVDVCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hp
bGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBl
bmQoUmVnaXN0cmFibGVEb21haW46OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFp
blN0cmluZyhzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKSkpOworCisgICAgcmV0dXJuIHJlc3Vs
dHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0
ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9t
YWluc1RvQmxvY2sgPSB0aGlzLT5kb21haW5zVG9CbG9jaygpOworCisgICAgaWYgKGRvbWFpbnNU
b0Jsb2NrLmlzRW1wdHkoKSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSAmJiAhZG9t
YWluc1RvQmxvY2suaXNFbXB0eSgpKQorICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMo
ImJsb2NrIiwgZG9tYWluc1RvQmxvY2spOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0Zv
ckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBz
dG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNz
UXVldWUoKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5kZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgdXBkYXRpbmcgY29va2llIGJsb2NraW5nLiIpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCitWZWN0b3I8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OlByZXZhbGVudERvbWFpbkRhdGE+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmV2YWxlbnREb21haW5zKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBWZWN0b3I8UHJl
dmFsZW50RG9tYWluRGF0YT4gcmVzdWx0czsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KG1fZGF0YWJhc2UsICJTRUxFQ1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVk
IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYg
KHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0
czsKKyAgICAKKyAgICB3aGlsZSAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMCkpCisgICAgICAgICAgICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNr
ZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRl
eHQoMSkpCisgICAgICAgICAgICAsIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQu
Z2V0Q29sdW1uRG91YmxlKDIpKQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDMpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQo
NCkgPyB0cnVlIDogZmFsc2UKKyAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBy
ZXN1bHRzOworfQorCitWZWN0b3I8dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKSBjb25zdAoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiByZXN1bHRz
OworICAgIE9wdGlvbmFsPFNlY29uZHM+IGV4cGlyYXRpb25EYXRlVGltZSA9IHN0YXRpc3RpY3NF
cGlyYXRpb25UaW1lKCk7CisgICAgaWYgKCFleHBpcmF0aW9uRGF0ZVRpbWUpCisgICAgICAgIHJl
dHVybiByZXN1bHRzOworCisgICAgaWYgKG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQuYmluZERvdWJsZSgxLCBleHBpcmF0aW9uRGF0ZVRpbWUudmFsdWUoKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAgd2hpbGUgKG1fZmlu
ZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDApKTsKKworICAgIGludCByZXNldFJlc3VsdCA9IG1fZmluZEV4cGly
ZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJl
c2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworCisgICAgcmV0dXJuIHJlc3Vs
dHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFy
RXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byBleHBpcmVkUmVjb3JkcyA9IGZpbmRFeHBpcmVkVXNlckludGVyYWN0
aW9ucygpOworICAgIGlmIChleHBpcmVkUmVjb3Jkcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gZXhwaXJlZFJlY29yZElEcyA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9y
UmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGV4cGlyZWRSZWNvcmRzLmJlZ2luKCks
IGV4cGlyZWRSZWNvcmRzLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJFeHBp
cmVkSW50ZXJhY3Rpb24obV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9t
YWlucyBTRVQgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSAwLCBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBleHBpcmVkUmVjb3JkSURzLCAiKSIpKTsK
KyAgICBpZiAoY2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24ucHJlcGFyZSgpICE9IFNRTElURV9PSykK
KyAgICAgICAgcmV0dXJuOworCisgICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZVN0b3JhZ2VBY2Nl
c3MobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zICIsIGV4cGlyZWRSZWNvcmRJRHMsICIpIikpOworICAgIGlmIChyZW1v
dmVTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChjbGVhckV4cGlyZWRJbnRlcmFjdGlvbi5zdGVwKCkgIT0gU1FMSVRFX0RPTkUK
KyAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVj
dG9yPHVuc2lnbmVkPiYmIGRvbWFpbklEc1RvQ2xlYXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWluSURzVG9DbGVhci5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoV1RGOjpJdGVy
YXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5JRHNUb0NsZWFyLmJl
Z2luKCksIGRvbWFpbklEc1RvQ2xlYXIuZW5kKCkpKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBj
bGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElO
ICgiLCBsaXN0VG9DbGVhciwgIikiKSk7CisgICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyBmYWlsZWQgdG8gYmlu
ZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1ZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OnJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0
aGVyaW5nID0gZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpID4gV2FsbFRpbWU6Om5vdygp
OworICAgIGJvb2wgc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0Zvckdy
YW5kZmF0aGVyaW5nICYmIGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKTsKKworICAgIGlm
IChzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nKQorICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lU3RhbXAoKTsKKworICAgIGNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsK
KyAgICAKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHByZXZhbGVudFJlc291cmNlczsK
KworICAgIFZlY3RvcjxQcmV2YWxlbnREb21haW5EYXRhPiBwcmV2YWxlbnREb21haW5zID0gdGhp
cy0+cHJldmFsZW50RG9tYWlucygpOworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZG9tYWluSURzVG9D
bGVhckdyYW5kZmF0aGVyaW5nOworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogcHJldmFsZW50
RG9tYWlucykgeworICAgICAgICBpZiAoIXN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gJiYg
KCFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nIHx8ICFzdGF0aXN0aWMuZ3JhbmRmYXRoZXJl
ZCkpCisgICAgICAgICAgICBwcmV2YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHN0YXRpc3RpYy5yZWdp
c3RlcmFibGVEb21haW4pOworCisgICAgICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5n
ICYmIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkKQorICAgICAgICAgICAgZG9tYWluSURzVG9DbGVh
ckdyYW5kZmF0aGVyaW5nLmFwcGVuZChzdGF0aXN0aWMuZG9tYWluSUQpOworICAgIH0KKworICAg
IGNsZWFyR3JhbmRmYXRoZXJpbmcoV1RGTW92ZShkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJp
bmcpKTsKKyAgICAKKyAgICByZXR1cm4gcHJldmFsZW50UmVzb3VyY2VzOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRl
ZCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgaWYgKG1fb2JzZXJ2ZWREb21haW5Db3VudC5zdGVwKCkgPT0gU1FMSVRF
X1JPVykKKyAgICAgICAgY291bnQgPSBtX29ic2VydmVkRG9tYWluQ291bnQuZ2V0Q29sdW1uSW50
KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9vYnNlcnZlZERvbWFpbkNvdW50LnJlc2V0
KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRF
X09LKTsKKworICAgIGlmIChjb3VudCA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJp
ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwYXJhbWV0ZXJzKCkucHJ1bmVFbnRy
aWVzRG93blRvIDw9IHBhcmFtZXRlcnMoKS5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisKKyAgICBz
aXplX3QgY291bnRMZWZ0VG9QcnVuZSA9IGNvdW50IC0gcGFyYW1ldGVycygpLnBydW5lRW50cmll
c0Rvd25UbzsKKyAgICBBU1NFUlQoY291bnRMZWZ0VG9QcnVuZSk7CisKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgcmVjb3Jkc1RvUHJ1bmUobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIGRvbWFp
bklEIEZST00gT2JzZXJ2ZWREb21haW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQ
cmV2YWxlbnQsIGxhc3RTZWVuIERFU0MgTElNSVQgIiwgU3RyaW5nOjpudW1iZXIoY291bnRMZWZ0
VG9QcnVuZSkpKTsKKyAgICBpZiAocmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9P
SykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVk
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgVmVjdG9yPHVuc2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKKyAgICB3aGlsZSAo
cmVjb3Jkc1RvUHJ1bmUuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGVudHJpZXNUb1By
dW5lLmFwcGVuZChyZWNvcmRzVG9QcnVuZS5nZXRDb2x1bW5JbnQoMCkpOworCisgICAgYXV0byBs
aXN0VG9QcnVuZSA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVk
Pjo6aXRlcmF0b3I+KGVudHJpZXNUb1BydW5lLmJlZ2luKCksIGVudHJpZXNUb1BydW5lLmVuZCgp
KSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcHJ1bmVDb21tYW5kKG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIkRFTEVURSBmcm9tIE9ic2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJTiAoIiwg
bGlzdFRvUHJ1bmUsICIpIikpOworICAgIGlmIChwcnVuZUNvbW1hbmQucHJlcGFyZSgpICE9IFNR
TElURV9PSworICAgICAgICB8fCBwcnVuZUNvbW1hbmQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVy
cm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxh
c3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFdhbGxUaW1lIGxhc3RTZWVu
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fdXBkYXRl
TGFzdFNlZW5TdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBsYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9j
aCgpLnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZUxhc3RTZWVuU3Rh
dGVtZW50LmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Cisg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2VlbiBmYWlsZWQgdG8gYmluZCwgZXJyb3Ig
bWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LnJlc2V0
KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRF
X09LKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0
TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBzZWNvbmRz
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICB1cGRhdGVMYXN0
U2Vlbihkb21haW4sIFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSkp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShk
b21haW4sIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDIwYmMzMmU1N2Q0NDg4YWIzZDM3NTg3NGY1NTBjZWNiOWE2NDBl
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCkBAIC0wLDAgKzEsMjA0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9B
RF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgi
CisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgU1FMaXRlRGF0YWJhc2U7CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7CitzdHJ1Y3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKKworLy8gVGhpcyBpcyBhbHdheXMg
Y29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIHsKK3B1YmxpYzoKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZShX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBTdHJpbmcm
IHN0b3JhZ2VEaXJlY3RvcnlQYXRoKTsKKworICAgIHZvaWQgcG9wdWxhdGVGcm9tTWVtb3J5U3Rv
cmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJik7CisKKyAgICB2b2lk
IGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsYXNz
aWZ5UHJldmFsZW50UmVzb3VyY2VzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUlm
TmVlZGVkKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpIG92
ZXJyaWRlOworCisgICAgdm9pZCBncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0
IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRp
c3RpY3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzVmVyeVBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlz
R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVE
b21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29u
c3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9t
YWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJv
bShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVE
b21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9w
RnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxl
bWV0cnkoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25z
dCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJhbWVJ
RD4sIFBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURv
bWFpbiYmLCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBn
cmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJh
bWVJRCwgUGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihj
b25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2
aWdhdGVkRnJvbURvbWFpbiYsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4m
KSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNv
dXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92
ZXJyaWRlOworICAgIHZvaWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVk
RnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOworCisgICAg
dm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJy
aWRlOworICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgU2Vjb25kcykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpbnNlcnRP
YnNlcnZlZERvbWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsK
KyAgICBib29sIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQmLCB1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1l
RG9tYWluKTsKKyAgICBib29sIHJlbGF0aW9uc2hpcEV4aXN0cyhXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQmLCB1bnNpZ25lZCBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
c2Vjb25kRG9tYWluKSBjb25zdDsKKyAgICB1bnNpZ25lZCBkb21haW5JRChjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIGNvbnN0OworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIGNvbmZpcm1Eb21h
aW5Eb2VzTm90RXhpc3QoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyNlbmRpZgor
ICAgIHZvaWQgdXBkYXRlTGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxsVGlt
ZSk7CisgICAgdm9pZCBzZXRVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4m
LCBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiwgV2FsbFRpbWUpOworICAgIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2soKSBjb25zdDsKKworICAgIHN0cnVjdCBQcmV2YWxl
bnREb21haW5EYXRhIHsKKyAgICAgICAgdW5zaWduZWQgZG9tYWluSUQ7CisgICAgICAgIFJlZ2lz
dHJhYmxlRG9tYWluIHJlZ2lzdGVyYWJsZURvbWFpbjsKKyAgICAgICAgV2FsbFRpbWUgbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWU7CisgICAgICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9u
OworICAgICAgICBib29sIGdyYW5kZmF0aGVyZWQ7CisgICAgfTsKKyAgICBWZWN0b3I8UHJldmFs
ZW50RG9tYWluRGF0YT4gcHJldmFsZW50RG9tYWlucygpIGNvbnN0OworICAgIFZlY3Rvcjx1bnNp
Z25lZD4gZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCkgY29uc3Q7CisgICAgdm9pZCBjbGVh
ckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCk7CisgICAgdm9pZCBjbGVhckdyYW5kZmF0aGVyaW5n
KFZlY3Rvcjx1bnNpZ25lZD4mJik7CisgICAgYm9vbCBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nl
c3NUaHJvdWdoUHJvbXB0KHVuc2lnbmVkIGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFp
bnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJl
Y2xhc3NpZnlSZXNvdXJjZXMoKTsKKyAgICBzdHJ1Y3QgTm90VmVyeVByZXZhbGVudFJlc291cmNl
cyB7CisgICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdGVyYWJsZURvbWFpbjsKKyAgICAg
ICAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBwcmV2YWxlbmNlOworICAgICAgICB1bnNpZ25lZCBz
dWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudDsKKyAgICAgICAgdW5zaWduZWQgc3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50OworICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgfTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RW
ZXJ5UHJldmFsZW50UmVzb3VyY2VzPiBmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpOwor
CisgICAgYm9vbCBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQmLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBD
b29raWVUcmVhdG1lbnRSZXN1bHQgeyBBbGxvdywgQmxvY2tBbmRLZWVwLCBCbG9ja0FuZFB1cmdl
IH07CisgICAgQ29va2llVHJlYXRtZW50UmVzdWx0IGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlKTsKKyAgICB1bnNpZ25lZCByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhh
dFJlZGlyZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8
dW5zaWduZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHMpOworICAgIHZvaWQgc2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNl
dDx1bnNpZ25lZD4mJik7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJG
cmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlE
LCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJik7CisgICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1By
ZXZhbGVudCgpOworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50
UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVEYXRhUmVj
b3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0
aWNzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyAgICBlbnVtIGNsYXNzIEFkZGVkUmVjb3JkIHsgTm8s
IFllcyB9OworICAgIHN0ZDo6cGFpcjxBZGRlZFJlY29yZCwgdW5zaWduZWQ+IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
Jik7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1Jl
bW92ZVdlYnNpdGVEYXRhRm9yKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0RhdGFiYXNlU3RvcmUo
KSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGNyZWF0ZVNjaGVtYSgp
OworICAgIGJvb2wgcHJlcGFyZVN0YXRlbWVudHMoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcg
bV9zdG9yYWdlRGlyZWN0b3J5UGF0aDsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURhdGFi
YXNlIG1fZGF0YWJhc2U7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9v
YnNlcnZlZERvbWFpbkNvdW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBt
X2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FM
aXRlU3RhdGVtZW50IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50OworICAgIFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudCBtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRl
bWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV90b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV90
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb207CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHM7CisgICAgV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50IG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluczsKKyAgICBt
dXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbkV4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50
IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzOworICAgIFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgbXV0YWJs
ZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
RXhpc3RzOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzRnJvbTsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50OworICAgIFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudCBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50Owor
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1faXNQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91cGRhdGVWZXJ5UHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11
dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRT
dGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pc0dyYW5k
ZmF0aGVyZWRTdGF0ZW1lbnQ7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQg
bV9maW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSkgeyByZXR1cm4g
c3RvcmUuaXNEYXRhYmFzZVN0b3JlKCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuY3BwCmluZGV4IDE3Y2E1N2Y4ZjE0ZGFmYjc4YmE4YmNhZjBiMTJjYTkzZGI4NTAzYTgu
LmUzNDQxZjM0YmEyN2E0YTk5NWZiNzNkMzMwZTcyYjlhNTUwOTYxZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCkBAIC00OSw5NCAr
NDksNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBj
b25zdGV4cHIgdW5zaWduZWQgc3RhdGlzdGljc01vZGVsVmVyc2lvbiB7IDE1IH07Ci1jb25zdGV4
cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2sg
eyA1MCB9OwotY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50
ZXJ2YWwgeyA1X3MgfTsKLWNvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7
IDMwIH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKLQotI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAotc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3Qg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKLXsKLSAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7Ci0gICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAgIGlm
ICghYnVpbGRlci5pc0VtcHR5KCkpCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwo
IiwgIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbi5zdHJpbmcoKSk7Ci0gICAgfQot
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotY2xhc3MgT3BlcmF0
aW5nRGF0ZSB7Ci1wdWJsaWM6Ci0gICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKLQotICAg
IHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZyb21XYWxsVGltZShXYWxsVGltZSB0aW1lKQotICAgIHsK
LSAgICAgICAgZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25k
cygpOwotICAgICAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKLSAgICAgICAgaW50IHllYXJE
YXkgPSBkYXlJblllYXIobXMsIHllYXIpOwotICAgICAgICBpbnQgbW9udGggPSBtb250aEZyb21E
YXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7Ci0gICAgICAgIGludCBtb250aERh
eSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwot
Ci0gICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlIHsgeWVhciwgbW9udGgsIG1vbnRoRGF5IH07
Ci0gICAgfQotCi0gICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgdG9kYXkoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkpOwot
ICAgIH0KLQotICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCBtX21vbnRo
LCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkgfTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9tb250aERheSA9PSBvdGhlci5tX21vbnRoRGF5ICYmIG1fbW9udGggPT0gb3RoZXIu
bV9tb250aCAmJiBtX3llYXIgPT0gb3RoZXIubV95ZWFyOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwot
ICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDw9IG90aGVy
LnNlY29uZHNTaW5jZUVwb2NoKCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE9wZXJhdGluZ0Rh
dGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5KQotICAgICAgICA6IG1feWVhcih5
ZWFyKQotICAgICAgICAsIG1fbW9udGgobW9udGgpCi0gICAgICAgICwgbV9tb250aERheShtb250
aERheSkKLSAgICB7IH0KLQotICAgIGludCBtX3llYXIgeyAwIH07Ci0gICAgaW50IG1fbW9udGgg
eyAwIH07IC8vIFswLCAxMV0uCi0gICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0u
Ci19OwotCi1zdGF0aWMgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1lcmdlT3BlcmF0aW5nRGF0ZXMo
Y29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBleGlzdGluZ0RhdGVzLCBWZWN0b3I8T3BlcmF0
aW5nRGF0ZT4mJiBuZXdEYXRlcykKLXsKLSAgICBpZiAoZXhpc3RpbmdEYXRlcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBXVEZNb3ZlKG5ld0RhdGVzKTsKLQotICAgIFZlY3RvcjxPcGVyYXRp
bmdEYXRlPiBtZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUoKSArIG5ld0RhdGVzLnNpemUo
KSk7Ci0KLSAgICAvLyBNZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0b3JzIG9mIGRhdGVzLgotICAg
IHN0ZDo6bWVyZ2UoZXhpc3RpbmdEYXRlcy5iZWdpbigpLCBleGlzdGluZ0RhdGVzLmVuZCgpLCBu
ZXdEYXRlcy5iZWdpbigpLCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2VkRGF0ZXMuYmVnaW4oKSk7Ci0g
ICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZSBkYXRlcy4KLSAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRz
KG1lcmdlZERhdGVzKTsKLQotICAgIC8vIERyb3Agb2xkIGRhdGVzIHVudGlsIHRoZSBWZWN0b3Ig
c2l6ZSByZWFjaGVzIG9wZXJhdGluZ0RhdGVzV2luZG93LgotICAgIHdoaWxlIChtZXJnZWREYXRl
cy5zaXplKCkgPiBvcGVyYXRpbmdEYXRlc1dpbmRvdykKLSAgICAgICAgbWVyZ2VkRGF0ZXMucmVt
b3ZlKDApOwotCi0gICAgcmV0dXJuIG1lcmdlZERhdGVzOwotfQogCiBzdHJ1Y3QgU3RhdGlzdGlj
c0xhc3RTZWVuIHsKICAgICBSZWdpc3RyYWJsZURvbWFpbiBkb21haW47CkBAIC0xNTUsMzYgKzY3
LDI0IEBAIHN0YXRpYyB2b2lkIHBydW5lUmVzb3VyY2VzKEhhc2hNYXA8UmVnaXN0cmFibGVEb21h
aW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiBzCiAgICAgICAgIHN0YXRpc3RpY3NNYXAucmVt
b3ZlKHN0YXRpc3RpY3NUb1BydW5lW2ldLmRvbWFpbik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBj
b21wdXRlSW1wb3J0YW5jZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0
YXRpc3RpYykKLXsKLSAgICB1bnNpZ25lZCBpbXBvcnRhbmNlID0gbWF4SW1wb3J0YW5jZTsKLSAg
ICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UpCi0gICAgICAgIGlt
cG9ydGFuY2UgLT0gMTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFj
dGlvbikKLSAgICAgICAgaW1wb3J0YW5jZSAtPSAyOwotICAgIHJldHVybiBpbXBvcnRhbmNlOwot
fQotCiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBX
b3JrUXVldWUmIHdvcmtRdWV1ZSkKLSAgICA6IG1fc3RvcmUoc3RvcmUpCi0gICAgLCBtX3dvcmtR
dWV1ZSh3b3JrUXVldWUpCisgICAgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUs
IHdvcmtRdWV1ZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKICNlbmRp
ZgotICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CiAKLSAgICBt
X3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0geworICAgIHRoaXMtPndvcmtRdWV1ZSgpLT5kaXNwYXRjaEFmdGVyKDVfcywgW3dlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CiAgICAgICAgIGlmICh3ZWFrVGhpcykKICAgICAg
ICAgICAgIHdlYWtUaGlzLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsKICAgICB9KTsK
IH0KIAotUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp+UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlKCkKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpOwogfQogCiB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UGVyc2lzdGVudFN0b3JhZ2Uo
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlJiBwZXJzaXN0ZW50U3RvcmFn
ZSkKQEAgLTE5Niw3OSArOTYsMTYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3VsZFN1Ym1p
dFRlbGVtZXRyeSkKKyAgICBpZiAocGFyYW1ldGVycygpLnNob3VsZFN1Ym1pdFRlbGVtZXRyeSkK
ICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5k
U3VibWl0KCp0aGlzKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hv
dWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IHZhbHVlOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlS
ZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShi
b29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIG1fcGFy
YW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKQogewot
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFzaG91bGRSZW1vdmVE
YXRhUmVjb3JkcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBtX2FjdGl2ZVBsdWdp
blRva2Vucy5jbGVhcigpOwotICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJv
Y2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKQotICAgICAgICBtX2Fj
dGl2ZVBsdWdpblRva2Vucy5hZGQocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSk7Ci0jZW5k
aWYKLQotICAgIGF1dG8gcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gcmVnaXN0cmFibGVEb21h
aW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwotICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSB7
CisgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgICAgICsrc3RhdGlzdGljLmRhdGFSZWNvcmRz
UmVtb3ZlZDsKICAgICB9Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBSRUxFQVNF
X0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnLCAiQWJvdXQgdG8gcmVtb3ZlIGRhdGEgcmVjb3JkcyBmb3IgJXtwdWJsaWN9cy4iLCBk
b21haW5zVG9TdHJpbmcocHJldmFsZW50UmVzb3VyY2VEb21haW5zKS51dGY4KCkuZGF0YSgpKTsK
LSNlbmRpZgotCi0gICAgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQodHJ1ZSk7Ci0KLSAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlucyA9IGNyb3Nz
VGhyZWFkQ29weShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2hvdWxkTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5j
b3B5UmVmKCldICgpIG11dGFibGUgewotICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAg
ICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgd2Vha1RoaXMtPm1fc3RvcmUuZGVsZXRlV2Vic2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFp
bnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIFdURk1vdmUocHJldmFsZW50UmVzb3VyY2VEb21haW5z
KSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW2NhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHdvcmtR
dWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICB3b3JrUXVldWUtPmRpc3BhdGNoKFtkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSA9IGNy
b3NzVGhyZWFkQ29weShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldICgpIG11dGFi
bGUgewotICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNXaXRoRGVs
ZXRlZFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9
IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihk
b21haW4pOwotICAgICAgICAgICAgICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92
ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5zZXREYXRh
UmVjb3Jkc0JlaW5nUmVtb3ZlZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soKTsK
LSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19J
TkZPX0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1ZywgIkRvbmUgcmVtb3ZpbmcgZGF0YSByZWNvcmRzLiIpOwotI2VuZGlmCi0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7CiB9CiAKIHVuc2lnbmVkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhh
dmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJl
c291cmNlU3RhdGlzdGljLCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1RoYXRI
YXZlUmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdApA
QCAtMzI5LDUzICsxNjYsNDAgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW4KIAogYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUo
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCiB7Ci0gICAgaWYgKCFt
X2RlYnVnTW9kZUVuYWJsZWQpCisgICAgaWYgKCFkZWJ1Z01vZGVFbmFibGVkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiByZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJs
ZURvbWFpbiA9PSBtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgfHwgcmVzb3VyY2VTdGF0
aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNl
OworICAgIHJldHVybiByZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiA9PSBkZWJ1
Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkgfHwgcmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFi
bGVEb21haW4gPT0gZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpOwogfQogCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRh
UmVjb3JkcygpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xhc3Np
ZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbCkgewotICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGlj
IDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChp
c1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKHJlc291cmNlU3RhdGlzdGljKSkKLSAgICAgICAgICAg
ICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgICAgICBlbHNlIGlmICghcmVzb3VyY2VTdGF0aXN0
aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICBtYXJrQXNQcmV2
YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChyZXNvdXJjZVN0YXRpc3RpYyk7Ci0gICAg
ICAgICAgICAgICAgYXV0byBjdXJyZW50UHJldmFsZW5jZSA9IHJlc291cmNlU3RhdGlzdGljLmlz
UHJldmFsZW50UmVzb3VyY2UgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZTo6TG93OwotICAgICAgICAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5j
ZSA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY2FsY3VsYXRlUmVzb3VyY2VQ
cmV2YWxlbmNlKHJlc291cmNlU3RhdGlzdGljLCBjdXJyZW50UHJldmFsZW5jZSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gY3VycmVudFByZXZhbGVuY2UpCi0gICAgICAg
ICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQ
cmV2YWxlbmNlKTsKLSAgICAgICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlz
dGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGlz
UHJldmFsZW50RHVlVG9EZWJ1Z01vZGUocmVzb3VyY2VTdGF0aXN0aWMpKQorICAgICAgICAgICAg
c2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkhpZ2gpOworICAgICAgICBlbHNlIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5
UHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAgICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVk
aXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3RhdGlzdGljKTsKKyAgICAgICAgICAgIGF1dG8g
Y3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNl
ID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OkxvdzsKKyAgICAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IGNsYXNzaWZpZXIoKS5jYWxj
dWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxl
bmNlKTsKKyAgICAgICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNl
KQorICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGlj
LCBuZXdQcmV2YWxlbmNlKTsKICAgICAgICAgfQogICAgIH0KK30KIAotICAgIHJlbW92ZURhdGFS
ZWNvcmRzKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQoKTsKLSAgICAgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCi0gICAgICAgICAgICBtX3Bl
cnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKLQot
ICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jk
c1dlcmVTY2FubmVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0oKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1cm47Cit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fcGVy
c2lzdGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JX
cml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6
Rm9yY2VJbW1lZGlhdGVXcml0ZTo6Tm8pOworfQogCi0gICAgICAgICAgICBtX3N0b3JlLm5vdGlm
eVJlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9jZXNzZWQoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJbW1l
ZGlhdGVseSgpCit7CisgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVy
c2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0
YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVzKTsKIH0K
IAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nl
c3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1
aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3Rv
cmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwg
UGFnZUlEIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtMzkwLDcg
KzIxNCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9y
YWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3Jl
KSwgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJh
bWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlE
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgeworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKHN0b3Jl
KCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BG
cmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdl
SUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxl
cihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlE
LCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN0
b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwpAQCAtMzk5LDE0ICsyMjMsMTQgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29u
c3QgUmVnaXN0cmFibGVEb21haW4KICAgICB9KTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWlu
JiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWlu
JiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29s
IHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1
cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CiAKICAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKICAgICBpZiAoc2hvdWxk
QmxvY2tBbmRQdXJnZUNvb2tpZXMoc3ViRnJhbWVTdGF0aXN0aWMpKSB7CiAjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdF
bmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFn
ZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0
aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFzIG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0
aW9uIGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNz
IHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFy
dHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBm
aXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNl
bmRpZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5u
b3RSZXF1ZXN0QWNjZXNzKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDE0LDcgKzIzOCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
cyhSZWdpc3RyYWJsZURvbWFpbiYmCiAKICAgICBpZiAoIXNob3VsZEJsb2NrQW5kS2VlcENvb2tp
ZXMoc3ViRnJhbWVTdGF0aXN0aWMpKSB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJObyBuZWVkIHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7
cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5
IGNvbnRleHRzLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAl
e3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0
eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNl
bmRpZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNB
Y2Nlc3MpOwogICAgICAgICByZXR1cm47CkBAIC00MjMsMTMgKzI0NywxMyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVnaXN0
cmFibGVEb21haW4mJgogICAgIGF1dG8gdXNlcldhc1Byb21wdGVkRWFybGllciA9IHByb21wdEVu
YWJsZWQgJiYgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChzdWJGcmFt
ZVN0YXRpc3RpYywgdG9wRnJhbWVEb21haW4pOwogICAgIGlmIChwcm9tcHRFbmFibGVkICYmICF1
c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdh
bnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31z
IG9yIG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFt
ZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IkFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdl
IGFjY2VzcyB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMgb3Igbm90LiIsIHN1YkZyYW1l
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VB
Y2Nlc3NTdGF0dXM6OlJlcXVpcmVzVXNlclByb21wdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
IGVsc2UgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKICNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQs
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVk
IHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICV7
cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRp
ZgogICAgIH0KIApAQCAtNDQwLDcgKzI2NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmCiAg
ICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFJlZ2lzdHJhYmxlRG9tYWluJiYgZG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBvcGVuZXJQYWdlSUQsIFJlZ2lzdHJhYmxlRG9t
YWluJiYgb3BlbmVyRG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBPcGVuZXJQYWdlSUQgb3BlbmVy
UGFnZUlELCBPcGVuZXJEb21haW4mJiBvcGVuZXJEb21haW4pCiB7CiAgICAgQVNTRVJUKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVuZXJEb21haW4pOwogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwpAQCAtNDU2LDEyICsyODAsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUmVn
aXN0cmEKICAgICAgICAgcmV0dXJuOwogCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAg
UkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNj
ZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJXtw
dWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiIsIGRv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBvcGVuZXJE
b21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1w
b3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAl
e3B1YmxpY31zIHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGlu
dGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2Vzcy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CiAjZW5kaWYKICAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3Zl
KGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIFdURk1vdmUob3BlbmVyRG9tYWluKSwgV1RG
OjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIGZhbHNlLCBbXShib29sKSB7IH0pOwogfQogCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJl
Z2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYgdG9w
RnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRT
dG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwg
Ym9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTQ3Myw3ICsyOTcsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgcwogICAgIGdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZy
YW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFJlZ2lzdHJhYmxlRG9tYWluJiYg
c3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlv
bmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21w
dGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNr
KQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFj
Y2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBw
YWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCkBAIC00ODMsMTQgKzMwNywxNCBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoUmVnaXN0cmFibGVEbwogICAg
IH0KIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQg
Y2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdlciBleHBlcmltZW50YWwuCi0gICAgaWYgKHVz
ZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxl
ZCkgeworICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIgJiYgc3RvcmFnZUFjY2Vz
c1Byb21wdHNFbmFibGVkKCkpIHsKICAgICAgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFp
bik7CiAgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24p
OwogICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9w
RnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1lRG9tYWluKSk7CiAgICAgICAgIHN1YkZyYW1l
U3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2FsbFRpbWU6Om5vdygp
OwogICAgIH0KIAotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVEb21haW4g
PSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYo
bV9zdG9yZSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgc3RvcmUtPmNhbGxH
cmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwg
ZnJhbWVJRCwgcGFnZUlELCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc3RvcmUgPSBz
dG9yZS5jb3B5UmVmKCldKGJvb2wgdmFsdWUpIG11dGFibGUgewogICAgICAgICAgICAgc3RvcmUt
PnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCB2YWx1ZV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpOwpA
QCAtNDk5LDEwNSArMzIzLDM4IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChSZWdpc3RyYWJsZURvCiAgICAgfSk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4
aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZv
ckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCiB7Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUo
Y2FsbGJhY2spLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0g
bV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQs
IHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKSwgc3RvcmUgPSBtYWtlUmVmKG1fc3Rv
cmUpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhX
ZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFU
eXBlcygpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbd2Vh
a1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwg
d29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0gKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+JiYgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3Jr
UXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBkb21haW5zV2l0
aFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpLCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGljID0gd2Vha1RoaXMtPmVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9
IFdhbGxUaW1lOjpub3coKSArIHdlYWtUaGlzLT5tX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdU
aW1lOwotICAgICAgICAgICAgICAgIGlmICh3ZWFrVGhpcy0+bV9wZXJzaXN0ZW50U3RvcmFnZSkK
LSAgICAgICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVk
dWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVzKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFj
aygpOwotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5sb2dUZXN0aW5nRXZlbnQoIkdyYW5kZmF0
aGVyZWQiX3MpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOworICAgIGZv
ciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAg
ICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7CisgICAgfQogfQogCiBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5z
dXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKIHsKLSAgICBpZiAoIW1fZGVidWdN
b2RlRW5hYmxlZCkKKyAgICBpZiAoIWRlYnVnTW9kZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1RvQmxvY2s7CiAg
ICAgZG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKIAotICAgIGF1dG8m
IHN0YXRpY1Nlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4obV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBhdXRv
JiBzdGF0aWNTZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSk7CiAgICAgc2V0
UHJldmFsZW50UmVzb3VyY2Uoc3RhdGljU2Vzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2U6OkhpZ2gpOwotICAgIGRvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChtX2Rl
YnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOworICAgIGRvbWFpbnNUb0Jsb2NrLnVuY2hlY2tl
ZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwogCi0gICAgaWYgKCFtX2Rl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8mIG1h
bnVhbFJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4obV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICBpZiAoIWRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byYg
bWFudWFsUmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkpOwogICAgICAgICBz
ZXRQcmV2YWxlbnRSZXNvdXJjZShtYW51YWxSZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgIGRvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVu
ZChtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICBkb21haW5zVG9CbG9j
ay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKICNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291
cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgbV9kZWJ1Z01hbnVhbFBy
ZXZhbGVudFJlc291cmNlLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBSRUxFQVNF
X0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRpZCBzZXQgJXtwdWJsaWN9
cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcgTW9k
ZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CiAjZW5kaWYKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGRvbWFpbnNUb0Jsb2NrOwogfQog
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJsZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGlmIChlbmFibGUp
Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
VHVybmVkIElUUCBEZWJ1ZyBNb2RlIG9uLiIpOwotI2VuZGlmCi0KLSAgICBtX2RlYnVnTW9kZUVu
YWJsZWQgPSBlbmFibGU7Ci0gICAgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gZW5hYmxlOwotCi0g
ICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7Ci0gICAgLy8gVGhpcyB3
aWxsIGxvZyB0aGUgY3VycmVudCBjb29raWUgYmxvY2tpbmcgc3RhdGUuCi0gICAgaWYgKGVuYWJs
ZSkKLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOwotfQotCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKLXsKLSAgICBtX2RlYnVn
TWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBkb21haW47Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElmTmVjZXNzYXJ5KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSArK21fbGFz
dFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXI7Ci0gICAgbV93b3JrUXVldWUt
PmRpc3BhdGNoQWZ0ZXIobWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwsIFt0aGlz
LCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1
ZXN0SWRlbnRpZmllciA9ICptX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVu
dGlmaWVyXSB7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKCFtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlm
aWVyIHx8ICptX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyICE9
IHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIpIHsKLSAgICAgICAgICAgIC8v
IFRoaXMgcmVxdWVzdCBoYXMgYmVlbiBjYW5jZWxlZC4KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICAg
ICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwotICAgIH0pOwotfQotCi12b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3Rp
Y3NQcm9jZXNzaW5nUmVxdWVzdCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0g
V1RGOjpudWxsb3B0OwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21h
aW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZy
YW1lKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNjM1LDcgKzM5Miw3
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dGcmFtZU5hdmln
YXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21hCiAgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVE
b21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYg
dGFyZ2V0RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxU
aW1lIGxhc3RTZWVuKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC02
NDUsNyArNDAyLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omxv
Z1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZUQKICAgICAgICAgc2NoZWR1bGVT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwogfQogCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdGFyZ2V0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHNvdXJj
ZURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiB0YXJnZXREb21haW4pCiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTY1OCw3ICs0MTUsNyBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChj
b25zdCBSZWdpc3RyYWJsZQogICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVx
dWVzdElmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFp
bikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJh
Y3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mIGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIApAQCAtNzI4LDcgKzQ4NSw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgp
ID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuaXNQcmV2YWxlbnRSZXNvdXJjZSAmJiBtYXBFbnRy
eS0+dmFsdWUuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2U7CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Citib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRv
cEZyYW1lRG9tYWluKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CkBAIC03MzYsNyArNDkzLDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBSZWcKICAgICByZXR1cm4g
bWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVu
dHJ5LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZy
YW1lRG9tYWluKTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3Vi
RnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29u
c3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc0NCw3ICs1MDEsNyBAQCBib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0
IFJlZ2lzdAogICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5l
bmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnMuY29udGFpbnModG9wRnJhbWVEb21haW4pOwogfQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3Rl
ZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21h
aW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKIApAQCAtNzc3LDcgKzUzNCw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAg
ICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFs
c2UgOiBtYXBFbnRyeS0+dmFsdWUuZ3JhbmRmYXRoZXJlZDsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21h
aW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4p
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc4Nyw3ICs1NDQsNyBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRl
clRvcEZyYW1lRG9tYWluKGNvbnN0IFJlZwogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFp
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3Vi
UmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTc5Nyw3ICs1NTQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0CiAgICAgZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOwogfQog
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RU
byhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGly
ZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKIApAQCAtODA3LDcgKzU2NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnCiAgICAg
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21h
aW4pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJl
c291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJlY3REb21haW4pCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9tYWlu
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgxNyw3ICs1NzQsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20o
Y29uc3QgUgogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdERvbWFp
bikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25z
dCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CiAKQEAgLTgyNyw3ICs1ODQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lz
dAogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGly
ZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3Qg
UmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwogCkBAIC04MzcsOTUgKzU5NCw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdp
CiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJl
Y3REb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQot
ICAgIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID0gc2Vjb25kczsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE1pbmltdW1UaW1l
QmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAg
IG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPSBzZWNv
bmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0
ZXJzLmdyYW5kZmF0aGVyaW5nVGltZSA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzIHNlY29uZHMp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMg
Pj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWUgPSBzZWNvbmRz
OwotICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCgpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2FjaGVN
YXhBZ2VDYXBUaW1lXSAoKSB7Ci0gICAgICAgIHN0b3JlLT5zZXRDYWNoZU1heEFnZUNhcChzZWNv
bmRzLCBbXSB7IH0pOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyBzZWNvbmRz
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRz
ID49IDBfcyk7Ci0gICAgCi0gICAgbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2Fw
VGltZSA9IHNlY29uZHM7Ci0gICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLX0K
LQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNp
ZGVDb29raWVzQWdlQ2FwKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0gICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRl
cnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lXSAoKSB7Ci0gICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrU2Vzc2lvbiA9IHN0b3JlLT5uZXR3b3JrU2Vzc2lvbigpKQotICAgICAgICAgICAgbmV0
d29ya1Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNldEFnZUNhcEZvckNsaWVudFNp
ZGVDb29raWVzKHNlY29uZHMpOwotICAgIH0pOwotI2VuZGlmCi19Ci0KLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9kYXRhUmVj
b3Jkc0JlaW5nUmVtb3ZlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Q
cm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAg
aWYgKCFtX2FjdGl2ZVBsdWdpblRva2Vucy5jb250YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NU
b2tlbigpKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAg
cmV0dXJuICFtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1l
Ojpub3coKSA+PSAobV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRl
cnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVk
KGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBt
X2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkID0gdmFsdWU7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQpCi0gICAgICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0g
TW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTk0MSwxMyArNjA5LDE0IEBAIHN0ZDo6
dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6Y3JlYXRlRW5jb2RlckZyCiAKICAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVu
Y29kZXIoKTsKICAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoInZlcnNpb24iLCBzdGF0aXN0aWNz
TW9kZWxWZXJzaW9uKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXAiLCBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAuc2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoImVuZE9mR3Jh
bmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCkuc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKIAogICAgIGVuY29kZXItPmVuY29kZU9iamVjdHMo
ImJyb3dzaW5nU3RhdGlzdGljcyIsIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmJlZ2luKCksIG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJbm5l
ciwgY29uc3QgYXV0byYgZG9tYWluKSB7CiAgICAgICAgIGRvbWFpbi52YWx1ZS5lbmNvZGUoZW5j
b2RlcklubmVyKTsKICAgICB9KTsKIAotICAgIGVuY29kZXItPmVuY29kZU9iamVjdHMoIm9wZXJh
dGluZ0RhdGVzIiwgbV9vcGVyYXRpbmdEYXRlcy5iZWdpbigpLCBtX29wZXJhdGluZ0RhdGVzLmVu
ZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJbm5lciwgT3BlcmF0aW5nRGF0ZSBkYXRlKSB7
CisgICAgYXV0byYgb3BlcmF0aW5nRGF0ZXMgPSB0aGlzLT5vcGVyYXRpbmdEYXRlcygpOworICAg
IGVuY29kZXItPmVuY29kZU9iamVjdHMoIm9wZXJhdGluZ0RhdGVzIiwgb3BlcmF0aW5nRGF0ZXMu
YmVnaW4oKSwgb3BlcmF0aW5nRGF0ZXMuZW5kKCksIFtdKEtleWVkRW5jb2RlciYgZW5jb2Rlcklu
bmVyLCBPcGVyYXRpbmdEYXRlIGRhdGUpIHsKICAgICAgICAgZW5jb2RlcklubmVyLmVuY29kZURv
dWJsZSgiZGF0ZSIsIGRhdGUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKICAgICB9KTsK
IApAQCAtOTY5LDkgKzYzOCw5IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjptZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoS2V5ZWREZWNvZGVyJiBkCiAKICAgICBkb3Vi
bGUgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKICAgICBpZiAoZGVjb2Rlci5kZWNvZGVE
b3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wKSkKLSAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2Fs
bFRpbWU6OmZyb21SYXdTZWNvbmRzKGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXApOworICAg
ICAgICB0aGlzLT5lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCkgPSBXYWxsVGltZTo6ZnJv
bVJhd1NlY29uZHMoZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCk7CiAgICAgZWxzZQotICAg
ICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07CisgICAgICAgIGNsZWFy
RW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwogCiAgICAgVmVjdG9yPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M+IGxvYWRlZFN0YXRpc3RpY3M7CiAgICAgYm9vbCBzdWNjZWVkZWQgPSBkZWNv
ZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIGxvYWRlZFN0YXRpc3RpY3Ms
IFt2ZXJzaW9uT25EaXNrXShLZXllZERlY29kZXImIGRlY29kZXJJbm5lciwgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgc3RhdGlzdGljcykgewpAQCAtOTk3LDcgKzY2Niw3IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoS2V5
ZWREZWNvZGVyJiBkCiAgICAgaWYgKCFzdWNjZWVkZWQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fb3BlcmF0aW5nRGF0ZXMgPSBtZXJnZU9wZXJhdGluZ0RhdGVzKG1fb3BlcmF0aW5nRGF0ZXMs
IFdURk1vdmUob3BlcmF0aW5nRGF0ZXMpKTsKKyAgICB0aGlzLT5vcGVyYXRpbmdEYXRlcygpID0g
bWVyZ2VPcGVyYXRpbmdEYXRlcyh0aGlzLT5vcGVyYXRpbmdEYXRlcygpLCBXVEZNb3ZlKG9wZXJh
dGluZ0RhdGVzKSk7CiB9CiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBA
IC0xMDA1LDcgKzY3NCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxlCiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigp
OwotICAgIG1fb3BlcmF0aW5nRGF0ZXMuY2xlYXIoKTsKKyAgICBvcGVyYXRpbmdEYXRlcygpLmNs
ZWFyKCk7CiAKICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRv
cjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIApAQCAtMTA1NiwzOSArNzI1
LDYgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1VzZXJHcmFu
dGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQKICAgICByZXR1cm4gc3RhdGlzdGljLnN0b3Jh
Z2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucy5jb250YWlucyhmaXJzdFBhcnR5RG9tYWluKTsK
IH0KIAotc3RhdGljIHZvaWQgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFj
dGlvbiwgY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKLXsKLSNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBzdGF0aWMgY29uc3QgYXV0byBtYXhOdW1iZXJPZkRv
bWFpbnNJbk9uZUxvZ1N0YXRlbWVudCA9IDUwOwotICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGlu
IHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRvbWFpbnNU
b1N0cmluZyhkb21haW5zKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGJhdGNoOwotICAgIGJhdGNoLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQp
OwotICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOwotICAgIHVuc2lnbmVkIG51bWJlck9mQmF0Y2hl
cyA9IHN0ZDo6Y2VpbChkb21haW5zLnNpemUoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtYXhOdW1i
ZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkpOwotCi0gICAgZm9yIChhdXRvJiBkb21haW4g
OiBkb21haW5zKSB7Ci0gICAgICAgIGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGlu
IHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMu
IiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmco
YmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgYmF0Y2guc2hyaW5rKDApOwotICAg
ICAgICAgICAgKytiYXRjaE51bWJlcjsKLSAgICAgICAgfQotICAgICAgICBiYXRjaC5hcHBlbmQo
ZG9tYWluKTsKLSAgICB9Ci0gICAgaWYgKCFiYXRjaC5pc0VtcHR5KCkpCi0gICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJs
aWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAl
dSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBk
b21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oYWN0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0oZG9tYWlucyk7Ci0jZW5kaWYKLX0KLQog
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTExMDQsNTIgKzc0MCwyMyBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmco
Q29tcGxldGlvbkhhbmRsZXI8dgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1f
ZGVidWdMb2dnaW5nRW5hYmxlZCAmJiAhZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKQorICAgIGlm
IChkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkgJiYgIWRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkKICAg
ICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9jayIsIGRvbWFpbnNUb0Jsb2NrKTsK
IAotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1Ro
cmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUo
KSksIGRvbWFpbnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgIHN0b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVz
Rm9ySGFuZGxlcihkb21haW5zVG9CbG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyks
IHN0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3Rp
Y3NRdWV1ZSgpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKCF3
ZWFrVGhpcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAotICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1f
ZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1
cGRhdGluZyBjb29raWUgYmxvY2tpbmcuIik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0df
SU5GT19JRih3ZWFrVGhpcy0+ZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsKICNlbmRpZgog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5z
KGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3Jl
ID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9t
YWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21h
aW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBbc3RvcmUgPSBzdG9y
ZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlz
cGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVj
dG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29w
eShkb21haW5zKV0gewotICAgICAgICBzdG9yZS0+Y2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGRv
bWFpbnMpOwotICAgIH0pOwotCi0gICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLX0KLQogdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1
bmN0aW9uKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTE3
OCwxMSArNzg1LDExIEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUCiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJp
bmcgPSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPiBXYWxsVGltZTo6bm93KCk7Ci0g
ICAgYm9vbCBzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRm
YXRoZXJpbmcgJiYgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOworICAgIGJvb2wgc2hv
dWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAo
KSA+IFdhbGxUaW1lOjpub3coKTsKKyAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcg
PSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wKCk7CiAKICAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKLSAgICAgICAg
bV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0geyB9OworICAgICAgICBjbGVhckVuZE9m
R3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAoKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gcHJldmFsZW50UmVzb3VyY2VzOwogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAudmFsdWVzKCkpIHsKQEAgLTExOTYsNjIgKzgwMywxNiBAQCBWZWN0
b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cmVnaXN0cmFibGVEb21haW5zVAogICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CiAK
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNsdWRlVG9kYXlBc09w
ZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBhdXRvIHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAo
IW1fb3BlcmF0aW5nRGF0ZXMuaXNFbXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMu
bGFzdCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5z
aXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCi0gICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMu
cmVtb3ZlKDApOwotCi0gICAgbV9vcGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOwotfQotCi1i
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGly
ZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9vcGVyYXRp
bmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpIHsKLSAgICAgICAgaWYgKE9w
ZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShyZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSkgPCBtX29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFs
IGNyaXRlcmlhIGZvciBhbiBleHBpcmVkIHN0YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGlu
ZyBmb3IgYSB0aWdodGVyIHJlc3RyaWN0aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpLgotICAgIGlm
IChtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICBpZiAo
V2FsbFRpbWU6Om5vdygpID4gcmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvblRpbWUgKyBtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlz
dGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVz
ID0gbWF4aW11bUVudHJ5Q291bnQ7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMu
cHJ1bmVFbnRyaWVzRG93blRvID0gcHJ1bmVUYXJnZXRDb3VudDsKLX0KLQogdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGlmIChtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5zaXplKCkgPD0gbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzKQor
ICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPD0gcGFyYW1ldGVycygpLm1h
eFN0YXRpc3RpY3NFbnRyaWVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9wYXJh
bWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA8PSBtX3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0Vu
dHJpZXMpOworICAgIEFTU0VSVChwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvIDw9IHBh
cmFtZXRlcnMoKS5tYXhTdGF0aXN0aWNzRW50cmllcyk7CiAKLSAgICBzaXplX3QgbnVtYmVyT2ZF
bnRyaWVzTGVmdFRvUHJ1bmUgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3Bh
cmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvOworICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNM
ZWZ0VG9QcnVuZSA9IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSAtIHBhcmFtZXRlcnMo
KS5wcnVuZUVudHJpZXNEb3duVG87CiAgICAgQVNTRVJUKG51bWJlck9mRW50cmllc0xlZnRUb1By
dW5lKTsKIAogICAgIFZlY3RvcjxTdGF0aXN0aWNzTGFzdFNlZW4+IHJlc291cmNlc1RvUHJ1bmVQ
ZXJJbXBvcnRhbmNlW21heEltcG9ydGFuY2UgKyAxXTsKQEAgLTEyNjQsMjIgKzgyNSw2IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCgpCiAgICAgQVNTRVJUKCFudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0Rl
ZmF1bHRWYWx1ZXMoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
bV9wYXJhbWV0ZXJzID0geyB9OwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCi17Ci0gICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHkoKV0g
ewotICAgICAgICBzdG9yZS0+bG9nVGVzdGluZ0V2ZW50KGV2ZW50KTsKLSAgICB9KTsKLX0KLQog
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldExhc3RTZWVuKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFNlY29uZHMgc2Vjb25kcykKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTEzMDQsMjcgKzg0OSw2IEBAIHZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFiCiAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMs
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OlZlcnlIaWdoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vz
cyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlz
dGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHVw
ZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUuaAppbmRleCBlMzExNzdhMTJhOTgyODc3YTAwZWIwNjQ0NjMxOWMzM2FjZjE5YjM3Li5j
YTFkOTJhZGVjYzBjNGQ1MGU3ZTljZDM0MmQ1NmQxNDFjNWEwZmIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTcgKzI3LDEz
IEBACiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCi0jaW5jbHVkZSAi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUuaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvV29y
a1F1ZXVlLmg+CiAKLSNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKLSNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgS2V5ZWREZWNvZGVyOwogY2xhc3MgS2V5ZWRFbmNvZGVyOwpAQCAtNDYs
MzUgKzQyLDE5IEBAIHN0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotY2xhc3MgT3BlcmF0aW5nRGF0ZTsKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKIAogLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQg
LyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUn
cyBzdGF0aXN0aWNzIHF1ZXVlLgotY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZT4geworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIGZpbmFsIDog
cHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7CiBwdWJsaWM6Ci0gICAgdXNpbmcg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7
Ci0gICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bjsKLSAgICB1c2luZyBUb3BGcmFtZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OwotICAgIHVzaW5nIFN1YkZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47
Ci0gICAgdXNpbmcgU3ViUmVzb3VyY2VEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFp
bjsKLSAgICB1c2luZyBSZWRpcmVjdERvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OwotICAgIHVzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3RlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW47Ci0gICAgdXNpbmcgTmF2aWdhdGVkRnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lz
dHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE5hdmlnYXRlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0g
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgT3BlbmVyUGFnZUlEID0gdWludDY0
X3Q7Ci0gICAgdXNpbmcgUGFnZUlEID0gdWludDY0X3Q7Ci0gICAgdXNpbmcgRnJhbWVJRCA9IHVp
bnQ2NF90OwotCiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYsIFdvcmtRdWV1ZSYpOwotICAgIH5SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUoKTsKIAogICAgIHZvaWQgc2V0UGVyc2lzdGVudFN0b3JhZ2Uo
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlJik7CiAKLSAgICB2b2lkIGNs
ZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpOyB9CisgICAgdm9p
ZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgY29uc3QgSGFzaE1hcDxSZWdpc3RyYWJs
ZURvbWFpbiwgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OktleWVkRW5jb2Rlcj4gY3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3Q7CiAg
ICAgdm9pZCBtZXJnZVdpdGhEYXRhRnJvbURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7
CkBAIC04MiwxNDcgKzYyLDgxIEBAIHB1YmxpYzoKICAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhW
ZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljcz4mJik7CiAgICAgdm9pZCBwcm9jZXNzU3RhdGlz
dGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4m
KSBjb25zdDsKIAotICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhj
b25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKLSAgICB2b2lkIGNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KLSAg
ICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9p
ZCBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RT
dG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9w
ZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpOwotICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFj
Y2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBncmFuZGZhdGhl
ckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2
b2lkIGNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKyAgICB2b2lk
IHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJp
ZGU7CiAKLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7Ci0gICAgYm9vbCBp
c1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYpIGNvbnN0OwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWlu
JikgY29uc3Q7CisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpIG92ZXJyaWRl
OworICAgIHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3lu
Y1N0b3JhZ2VJbW1lZGlhdGVseSgpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgU3RyaW5nIGR1bXBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAgIHZvaWQgc2V0
UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lkIHNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZv
aWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VB
Y2Nlc3MmJiwgT3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJikgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVl
KTsKLSAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNv
bnN0OworICAgIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJl
Z2lzdHJhYmxlRG9tYWluPiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFp
biYpOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1
YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLSAgICB2b2lkIHNldFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0
IFJlZGlyZWN0RG9tYWluJik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0g
ICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4m
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOwotICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOwor
ICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNl
RG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0
IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRB
c1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVj
dGVkVG9Eb21haW4mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgbG9nVGVzdGluZ0V2ZW50
KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIFN0cmluZyBkdW1wUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KTsKLSAgICB2b2lkIHNldFBydW5lRW50
cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCk7Ci0gICAgdm9pZCByZXNldFBhcmFt
ZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3Jh
bmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0g
ICAgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdDsKKyAgICB2b2lkIHNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0
IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURv
bWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRv
KGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0
IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURh
dGFSZWNvcmRzUmVtb3ZhbChib29sKTsKLSAgICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRy
eShib29sKTsKLSAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7
Ci0gICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25k
cyk7Ci0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0gICAgdm9pZCBz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOwotICAgIGJvb2wgaXNEZWJ1
Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9OwotICAg
IHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKTsKKyAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWlu
JiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNj
ZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwg
Ym9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NT
dGF0dXMpPiYmKTsKLSAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYm
LCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVk
Tm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGhhc1N0b3Jh
Z2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9w
dGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92ZXJyaWRl
OworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1l
RG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsb2dGcmFt
ZU5hdmlnYXRpb24oY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFp
biYsIGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNN
YWluRnJhbWUpOwotICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9t
YWluJik7Ci0gICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VE
b21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKTsKLSAgICB2
b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBj
b25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKTsKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihj
b25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2
aWdhdGVkRnJvbURvbWFpbiYsIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4m
KSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNv
dXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92
ZXJyaWRlOworICAgIHZvaWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVk
RnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAg
dm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAg
IGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7Cisg
ICAgdm9pZCBjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92
ZXJyaWRlOworICAgIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiwgU2Vjb25kcyk7Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCk7Ci0KLSAgICBjb25zdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yZTsgfQorICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mLCBTZWNvbmRzKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgYm9vbCBzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgc3RhdGljIGJvb2wgaGFzVXNlckdyYW50
ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKICAgICBib29sIGhhc0hhZFVuZXhwaXJlZFJl
Y2VudFVzZXJJbnRlcmFjdGlvbihSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7Ci0gICAg
Ym9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikg
Y29uc3Q7CiAgICAgYm9vbCB3YXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0
aW9uKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGN1cnJlbnQsIGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmIHVwZGF0ZWQpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CiAgICAgdW5zaWduZWQgcmVjdXJzaXZlbHlH
ZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmLCBIYXNoU2V0PFJlZGlyZWN0ZWRUb0RvbWFpbj4mLCB1bnNpZ25lZCBu
dW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdDsKLSAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NQ
cm9tcHRzRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJs
ZWQgID0gZW5hYmxlZDsgfQotICAgIGJvb2wgc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25z
dDsKLSAgICB2b2lkIHNldERlYnVnTG9nZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2Rl
YnVnTG9nZ2luZ0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0RGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQoYm9vbCk7Ci0gICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5n
UmVxdWVzdElmTmVjZXNzYXJ5KCk7CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5h
bChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBPcHRpb25hbDxGcmFtZUlEPiwg
UGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJik7CiAgICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0
ZWRUb1ByZXZhbGVudChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgYm9vbCBpc1ByZXZh
bGVudER1ZVRvRGVidWdNb2RlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgp
OworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2Vz
Rm9yRGVidWdNb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVk
ZWQoKTsKKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CiAgICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICBWZWN0b3I8UmVnaXN0
cmFibGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsK
LSAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2Fj
aGVNYXhBZ2VDYXAoKTsKLSAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNl
Y29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgp
OwotI2VuZGlmCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFp
bnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01lbW9yeVN0
b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCiAKLSAgICBzdHJ1Y3QgUGFyYW1l
dGVycyB7Ci0gICAgICAgIHNpemVfdCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKLSAgICAg
ICAgc2l6ZV90IG1heFN0YXRpc3RpY3NFbnRyaWVzIHsgMTAwMCB9OwotICAgICAgICBPcHRpb25h
bDxTZWNvbmRzPiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uOwotICAgICAgICBTZWNvbmRzIG1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFfaCB9OwotICAgICAgICBTZWNv
bmRzIGdyYW5kZmF0aGVyaW5nVGltZSB7IDI0X2ggKiA3IH07Ci0gICAgICAgIFNlY29uZHMgY2Fj
aGVNYXhBZ2VDYXBUaW1lIHsgMjRfaCAqIDcgfTsKLSAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRl
Q29va2llc0FnZUNhcFRpbWUgeyAyNF9oICogNyB9OwotICAgICAgICBib29sIHNob3VsZE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxzZSB9OwotICAgICAgICBib29s
IHNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9
OwotICAgICAgICBib29sIHNob3VsZFN1Ym1pdFRlbGVtZXRyeSB7IHRydWUgfTsKLSAgICB9Owot
Ci0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBtX3N0b3JlOwotICAgIFJlZjxX
b3JrUXVldWU+IG1fd29ya1F1ZXVlOwogICAgIFdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlPiBtX3BlcnNpc3RlbnRTdG9yYWdlOwogICAgIEhhc2hNYXA8UmVn
aXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwOwotI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQotICAgIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyQ29jb2EgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsK
LSNlbHNlCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIgbV9yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKLSNlbmRpZgotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgIEhhc2hTZXQ8dWludDY0X3Q+IG1fYWN0aXZlUGx1Z2luVG9rZW5zOwotI2Vu
ZGlmCi0gICAgUGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7Ci0gICAgVmVjdG9yPE9wZXJhdGluZ0Rh
dGU+IG1fb3BlcmF0aW5nRGF0ZXM7Ci0gICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wOwotICAgIGJvb2wgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsgZmFsc2UgfTsKLSAg
ICBib29sIG1fZGVidWdNb2RlRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4gbV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlIHsgVVJMIHsgVVJMKCksICJo
dHRwczovLzNyZHBhcnR5dGVzdHdlYmtpdC5vcmciX3MgfSB9OwotICAgIFJlZ2lzdHJhYmxlRG9t
YWluIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIG1fc3RvcmFnZUFj
Y2Vzc1Byb21wdHNFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGF0YVJlY29yZHNCZWlu
Z1JlbW92ZWQgeyBmYWxzZSB9OwotICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQ7Ci0KLSAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyIHsgMCB9OwotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRp
bmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSkgeyByZXR1cm4g
c3RvcmUuaXNNZW1vcnlTdG9yZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yZmQ4NGQ2ODAwNjg0YTJhODk3ZmI4YmE5NGNhYWVjYTM2YzI1MjhhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTAsMCArMSw1NjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgiCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIKKyNpbmNs
dWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5Lmgi
CisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1
ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0ZXhwciBTZWNv
bmRzIG1pbmltdW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Citjb25zdGV4
cHIgdW5zaWduZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OworCisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECitzdGF0aWMgU3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRl
cjsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFidWls
ZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoZG9tYWluLnN0cmluZygpKTsKKyAgICB9CisgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKyNlbmRpZgorCitPcGVyYXRpbmdEYXRlIE9wZXJh
dGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZSB0aW1lKQoreworICAgIGRvdWJsZSBtcyA9
IHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMoKTsKKyAgICBpbnQgeWVhciA9
IG1zVG9ZZWFyKG1zKTsKKyAgICBpbnQgeWVhckRheSA9IGRheUluWWVhcihtcywgeWVhcik7Cisg
ICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVh
cikpOworICAgIGludCBtb250aERheSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXks
IGlzTGVhcFllYXIoeWVhcikpOworCisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBt
b250aCwgbW9udGhEYXkgfTsKK30KKworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2Rh
eSgpCit7CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6
bm93KCkpOworfQorCitTZWNvbmRzIE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gU2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIs
IG1fbW9udGgsIG1fbW9udGhEYXkpICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJh
dGluZ0RhdGU6Om9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09
IG90aGVyLm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVy
YXRpbmdEYXRlOjpvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9j
aCgpOworfQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5n
RGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0g
b3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCisgICAgOiBtX3N0b3JlKHN0b3Jl
KQorICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnko
KTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKK30KKwordW5z
aWduZWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5jZShjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICB1bnNp
Z25lZCBpbXBvcnRhbmNlID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXhJbXBvcnRh
bmNlOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAg
ICAgICAgaW1wb3J0YW5jZSAtPSAxOworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNl
ckludGVyYWN0aW9uKQorICAgICAgICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJuIGltcG9y
dGFuY2U7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsID0gdmFsdWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1l
dHJ5ID0gdmFsdWU7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1v
dmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIXNob3VsZFJlbW92ZURh
dGFSZWNvcmRzKCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIG1fYWN0aXZlUGx1Z2lu
VG9rZW5zLmNsZWFyKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpCisgICAgICAgIG1fYWN0
aXZlUGx1Z2luVG9rZW5zLmFkZChwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsKKyNlbmRp
ZgorCisgICAgYXV0byBwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSByZWdpc3RyYWJsZURvbWFp
bnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCk7CisgICAgaWYgKHByZXZhbGVudFJlc291cmNlRG9t
YWlucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIFJFTEVBU0VfTE9HX0lORk9f
SUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJB
Ym91dCB0byByZW1vdmUgZGF0YSByZWNvcmRzIGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0
cmluZyhwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisK
KyAgICBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCh0cnVlKTsKKworICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbcHJldmFsZW50UmVzb3VyY2VEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5
KHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0g
KCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgIGNhbGxi
YWNrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3ZWFrVGhp
cy0+bV9zdG9yZS5kZWxldGVXZWJzaXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWluc0luQWxsUGVy
c2lzdGVudERhdGFTdG9yZXMoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9y
ZWREYXRhVHlwZXMoKSwgV1RGTW92ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBzaG91bGRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgd29ya1F1ZXVlID0gd29y
a1F1ZXVlLmNvcHlSZWYoKV0oY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFp
bnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1
ZS0+ZGlzcGF0Y2goW2RvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRD
b3B5KGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKV0gKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
aygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHdlYWtUaGlzLT5pbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9t
YWlucyhXVEZNb3ZlKGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSk7CisgICAgICAgICAg
ICAgICAgd2Vha1RoaXMtPnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBjYWxsYmFjaygpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5h
YmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJl
Y29yZHMuIik7CisjZW5kaWYKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCkKKyAgICAgICAgY2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICAK
KyAgICByZW1vdmVEYXRhUmVjb3JkcyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyldICgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcnVu
ZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgICAgICBzeW5jU3RvcmFnZUlmTmVlZGVkKCk7CisK
KyAgICAgICAgaWYgKCFtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldIHsKKyAg
ICAgICAgICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgICAgICBpZiAoIXdl
YWtUaGlzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgbV9zdG9yZS5u
b3RpZnlSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc2VkKCk7CisgICAgICAgIH0pOworICAg
IH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJF
eGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nh
bm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpLCBzdG9yZSA9IG1ha2VSZWYo
bV9zdG9yZSldICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+cmVnaXN0cmFibGVEb21haW5z
V2l0aFdlYnNpdGVEYXRhKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVk
RGF0YVR5cGVzKCksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQs
IFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXSAoSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mJiBkb21haW5zV2l0aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGRvbWFp
bnNXaXRoV2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhXZWJzaXRlRGF0
YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldICgpIG11dGFibGUgeworICAgICAgICAg
ICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5ncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGRvbWFpbnNXaXRo
V2Vic2l0ZURhdGEpOworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJhbWV0ZXJz
LmdyYW5kZmF0aGVyaW5nVGltZTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c3luY1N0b3Jh
Z2VJbW1lZGlhdGVseSgpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAg
ICAgICAgd2Vha1RoaXMtPmxvZ1Rlc3RpbmdFdmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wg
ZW5hYmxlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5G
TyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJUdXJuZWQgSVRQIERlYnVnIE1vZGUgb24u
Iik7CisjZW5kaWYKKworICAgIG1fZGVidWdNb2RlRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX2Rl
YnVnTG9nZ2luZ0VuYWJsZWQgPSBlbmFibGU7CisKKyAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJj
ZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICAvLyBUaGlzIHdpbGwgbG9nIHRoZSBjdXJyZW50IGNvb2tp
ZSBibG9ja2luZyBzdGF0ZS4KKyAgICBpZiAoZW5hYmxlKQorICAgICAgICB1cGRhdGVDb29raWVC
bG9ja2luZyhbXSgpIHsgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKQoreworICAgIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFp
bjsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlz
dGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWRlbnRpZmllciA9ICsrbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmll
cjsKKyAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nl
c3NpbmdJbnRlcnZhbCwgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQ
cm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXJdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5n
UmVxdWVzdElkZW50aWZpZXIgIT0gc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmll
cikgeworICAgICAgICAgICAgLy8gVGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdXBkYXRlQ29va2llQmxvY2tp
bmcoW10oKSB7IH0pOworICAgICAgICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQ
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVz
dElkZW50aWZpZXIgPSBXVEY6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+
PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPSBz
ZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwor
CisgICAgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9
IHNlY29uZHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRl
cnMuZ3JhbmRmYXRoZXJpbmdUaW1lID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3Mp
OworCisgICAgbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAg
dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICAKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFr
ZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVd
ICgpIHsKKyAgICAgICAgc3RvcmUtPnNldENhY2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VD
YXBGb3JDbGllbnRTaWRlQ29va2llcyhTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKyAgICAKKyAg
ICBtX3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAg
ICB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgc2Vjb25kcyA9IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNh
cFRpbWVdICgpIHsKKyAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5l
dHdvcmtTZXNzaW9uKCkpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCkuc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7CisgICAg
fSk7CisjZW5kaWYKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3Vs
ZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVn
aW5Qcm9jZXNzZXMoKSkgeworICAgICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRh
aW5zKHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dl
cmVSZW1vdmVkIHx8IE1vbm90b25pY1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29y
ZHNXZXJlUmVtb3ZlZCArIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jk
c1JlbW92YWwpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0
YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAg
ICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFS
ZWNvcmRzV2VyZVJlbW92ZWQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhj
b25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3Rv
cmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShk
b21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0
b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorICAgIAorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBW
ZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jvc3NUaHJlYWRD
b3B5KGRvbWFpbnMpXSB7CisgICAgICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIo
ZG9tYWlucyk7CisgICAgfSk7CisKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCitPcHRp
b25hbDxTZWNvbmRzPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NFcGly
YXRpb25UaW1lKCkgY29uc3QKK3sKKyAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb24pCisgICAgICAgIHJldHVybiBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNl
RXBvY2goKSAtIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCk7
CisgICAgCisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVz
V2luZG93KQorICAgICAgICByZXR1cm4gbV9vcGVyYXRpbmdEYXRlcy5maXJzdCgpLnNlY29uZHNT
aW5jZUVwb2NoKCk7CisgICAgCisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworVmVjdG9y
PE9wZXJhdGluZ0RhdGU+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VPcGVyYXRp
bmdEYXRlcyhjb25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIGV4aXN0aW5nRGF0ZXMsIFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKQoreworICAgIGlmIChleGlzdGluZ0RhdGVzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobmV3RGF0ZXMpOworICAgIAorICAgIFZl
Y3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUoKSArIG5l
d0RhdGVzLnNpemUoKSk7CisgICAgCisgICAgLy8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9y
cyBvZiBkYXRlcy4KKyAgICBzdGQ6Om1lcmdlKGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3Rp
bmdEYXRlcy5lbmQoKSwgbmV3RGF0ZXMuYmVnaW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdlZERh
dGVzLmJlZ2luKCkpOworICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZGF0ZXMuCisgICAgcmVtb3Zl
UmVwZWF0ZWRFbGVtZW50cyhtZXJnZWREYXRlcyk7CisgICAgCisgICAgLy8gRHJvcCBvbGQgZGF0
ZXMgdW50aWwgdGhlIFZlY3RvciBzaXplIHJlYWNoZXMgb3BlcmF0aW5nRGF0ZXNXaW5kb3cuCisg
ICAgd2hpbGUgKG1lcmdlZERhdGVzLnNpemUoKSA+IG9wZXJhdGluZ0RhdGVzV2luZG93KQorICAg
ICAgICBtZXJnZWREYXRlcy5yZW1vdmUoMCk7CisgICAgCisgICAgcmV0dXJuIG1lcmdlZERhdGVz
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNP
cGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byB0b2RheSA9IE9wZXJhdGluZ0RhdGU6OnRvZGF5KCk7CisgICAgaWYg
KCFtX29wZXJhdGluZ0RhdGVzLmlzRW1wdHkoKSAmJiB0b2RheSA8PSBtX29wZXJhdGluZ0RhdGVz
Lmxhc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKG1fb3BlcmF0aW5nRGF0ZXMu
c2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQorICAgICAgICBtX29wZXJhdGluZ0RhdGVz
LnJlbW92ZSgwKTsKKworICAgIG1fb3BlcmF0aW5nRGF0ZXMuYXBwZW5kKHRvZGF5KTsKK30KKwor
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkKFdh
bGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSBjb25zdAoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNp
emUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykgeworICAgICAgICBpZiAoT3BlcmF0aW5nRGF0
ZTo6ZnJvbVdhbGxUaW1lKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8IG1fb3BlcmF0
aW5nRGF0ZXMuZmlyc3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFsIGNyaXRlcmlhIGZvciBhbiBleHBpcmVk
IHN0YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGluZyBmb3IgYSB0aWdodGVyIHJlc3RyaWN0
aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpLgorICAgIGlmIChtX3BhcmFtZXRlcnMudGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbikgeworICAgICAgICBpZiAoV2FsbFRpbWU6Om5vdygpID4gbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbi52YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
Omhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291
cmNlU3RhdGlzdGljKSBjb25zdAoreworICAgIHJldHVybiBoYXNTdGF0aXN0aWNzRXhwaXJlZChy
ZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhz
aXplX3QgbWF4aW11bUVudHJ5Q291bnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBtX3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50
cnlDb3VudDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5l
RW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8g
PSBwcnVuZVRhcmdldENvdW50OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIG1fcGFyYW1ldGVycyA9IHsgfTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmIGV2
ZW50KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGV2ZW50ID0gZXZlbnQu
aXNvbGF0ZWRDb3B5KCldIHsKKyAgICAgICAgc3RvcmUtPmxvZ1Rlc3RpbmdFdmVudChldmVudCk7
CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVB
bGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3Rv
cmUtPnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewor
ICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRD
cmVhdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7CisgICAgdXBkYXRlQ2FjaGVN
YXhBZ2VDYXAoKTsKKyAgICB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVz
KGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9t
YWlucykKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdGF0aWMgY29uc3QgYXV0
byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCA9IDUwOworICAgIGlmIChkb21h
aW5zLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChkb21haW5zLnNp
emUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgeworICAgICAgICBS
RUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7
cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3I6ICV7cHVibGljfXMu
IiwgYWN0aW9uLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucykudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBi
YXRjaDsKKyAgICBiYXRjaC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1heE51bWJlck9mRG9tYWlu
c0luT25lTG9nU3RhdGVtZW50KTsKKyAgICBhdXRvIGJhdGNoTnVtYmVyID0gMTsKKyAgICB1bnNp
Z25lZCBudW1iZXJPZkJhdGNoZXMgPSBzdGQ6OmNlaWwoZG9tYWlucy5zaXplKCkgLyBzdGF0aWNf
Y2FzdDxmbG9hdD4obWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpKTsKKyAgICAK
KyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKGJhdGNoLnNp
emUoKSA9PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgeworICAgICAgICAg
ICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0
byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1Ymxp
Y31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJPZkJh
dGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBiYXRjaC5zaHJpbmsoMCk7CisgICAgICAgICAgICArK2JhdGNoTnVtYmVyOworICAgICAgICB9
CisgICAgICAgIGJhdGNoLmFwcGVuZChkb21haW4pOworICAgIH0KKyAgICBpZiAoIWJhdGNoLmlz
RW1wdHkoKSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4
dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVt
YmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEo
KSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShhY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShk
b21haW5zKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGE2MjBh
NWM1ZDAxY2FhNzAzY2FmNmNjOGUwMTc2OTBmZTllZDBkMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaApAQCAtMCwwICsxLDI2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2luY2x1ZGUgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1dvcmtRdWV1ZS5oPgorCisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisjaW5jbHVk
ZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEtleWVkRGVjb2RlcjsKK2NsYXNzIEtleWVkRW5jb2Rl
cjsKK3N0cnVjdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworfQorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOworCitj
bGFzcyBPcGVyYXRpbmdEYXRlIHsKK3B1YmxpYzoKKyAgICBPcGVyYXRpbmdEYXRlKCkgPSBkZWZh
dWx0OworICAgIAorICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIGZyb21XYWxsVGltZShXYWxsVGlt
ZSk7CisgICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgdG9kYXkoKTsKKyAgICBTZWNvbmRzIHNlY29u
ZHNTaW5jZUVwb2NoKCkgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGlu
Z0RhdGUmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBPcGVyYXRpbmdE
YXRlJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IE9wZXJhdGluZ0Rh
dGUmIG90aGVyKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgT3BlcmF0aW5nRGF0ZShpbnQg
eWVhciwgaW50IG1vbnRoLCBpbnQgbW9udGhEYXkpCisgICAgICAgIDogbV95ZWFyKHllYXIpCisg
ICAgICAgICwgbV9tb250aChtb250aCkKKyAgICAgICAgLCBtX21vbnRoRGF5KG1vbnRoRGF5KQor
ICAgIHsgfQorCisgICAgaW50IG1feWVhciB7IDAgfTsKKyAgICBpbnQgbV9tb250aCB7IDAgfTsg
Ly8gWzAsIDExXS4KKyAgICBpbnQgbV9tb250aERheSB7IDAgfTsgLy8gWzEsIDMxXS4KK307CisK
Ky8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KK2NsYXNz
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzID0gV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKKyAgICB1c2lu
ZyBSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVz
aW5nIFRvcEZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNp
bmcgU3ViRnJhbWVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2lu
ZyBTdWJSZXNvdXJjZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVz
aW5nIFJlZGlyZWN0RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNp
bmcgUmVkaXJlY3RlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAg
ICB1c2luZyBSZWRpcmVjdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsK
KyAgICB1c2luZyBOYXZpZ2F0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW47CisgICAgdXNpbmcgTmF2aWdhdGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURv
bWFpbjsKKyAgICB1c2luZyBEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdp
c3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBPcGVuZXJQYWdlSUQgPSB1aW50NjRfdDsKKyAgICB1
c2luZyBQYWdlSUQgPSB1aW50NjRfdDsKKyAgICB1c2luZyBGcmFtZUlEID0gdWludDY0X3Q7Cisg
ICAgCisgICAgdmlydHVhbCB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSA9IDA7CisgICAg
dm9pZCB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJh
YmxlRG9tYWluPiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisgICAgdm9pZCBjbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4mIGRvbWFpbnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisK
KyAgICB2b2lkIGluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5
bmNTdG9yYWdlSWZOZWVkZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNTdG9yYWdlSW1t
ZWRpYXRlbHkoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NV
bmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgT3BlbmVyUGFnZUlELCBP
cGVuZXJEb21haW4mJikgPSAwOworICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBncmFuZGZhdGhlckV4aXN0aW5n
V2Vic2l0ZURhdGEoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGNhbmNl
bFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKworICAgIHZpcnR1YWwgYm9v
bCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9w
RnJhbWVEb21haW4mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0
ZWRUb0RvbWFpbiYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhclByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgU3Ry
aW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiwgYm9vbCB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0dyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBncmFuZGZhdGhlckRhdGFGb3JEb21h
aW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFp
biYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25z
dCBUb3BGcmFtZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3RE
b21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBU
b3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYs
IGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworCisgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQo
Y29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVf
dCBtYXhpbXVtRW50cnlDb3VudCk7CisgICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6
ZV90IHBydW5lVGFyZ2V0Q291bnQpOworICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKCk7CisgICAgT3B0aW9uYWw8U2Vjb25kcz4gc3RhdGlzdGljc0VwaXJhdGlvblRpbWUo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnko
KSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9y
ZURhdGFSZWNvcmRzUmVtb3ZhbChib29sKTsKKyAgICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVt
ZXRyeShib29sKTsKKyAgICB2b2lkIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25k
cyk7CisgICAgdm9pZCBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vj
b25kcyk7CisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7CisgICAgdm9p
ZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wpOworICAgIGJvb2wgaXNE
ZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9Owor
ICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mKTsKKworICAgIHZpcnR1YWwgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1
YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBPcHRpb25hbDxGcmFtZUlEPiwg
UGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9t
YWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBG
cmFtZUlELCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9nRnJhbWVOYXZpZ2F0
aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25z
dCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1l
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlvbihjb25zdCBUb3BGcmFt
ZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5nKGNv
bnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBXYWxsVGltZSBs
YXN0U2VlbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNv
bnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24o
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGFz
dFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHByaW1hcnlEb21haW4sIFNlY29uZHMpID0g
MDsKKworICAgIHZvaWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKKworICAgIGNvbnN0IFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3N0
b3JlOyB9CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFuY2UgeyAz
IH07CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNNZW1vcnlTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRGF0YWJhc2VTdG9yZSgpY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0
YW5jZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgc3RhdGlj
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxP
cGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3
RGF0ZXMpOworICAgIHN0YXRpYyB2b2lkIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBj
aGFyKiBhY3Rpb24sIGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpOwor
CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSYsIFdvcmtRdWV1ZSYpOworCisgICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhwaXJlZChj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7CisgICAgYm9vbCBoYXNTdGF0aXN0
aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkgY29uc3Q7
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVl
ZGVkKCk7CisjZW5kaWYKKyAgICB2b2lkIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1
ZXN0SWZOZWNlc3NhcnkoKTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgPSAwOworICAgIHZpcnR1YWwg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNp
dGVEYXRhRm9yKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRl
ZCgpID0gMDsKKworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSB7
IHJldHVybiBtX3N0b3JlOyB9CisgICAgUmVmPFdvcmtRdWV1ZT4mIHdvcmtRdWV1ZSgpIHsgcmV0
dXJuIG1fd29ya1F1ZXVlOyB9CisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSYgY2xhc3NpZmllcigpIHsgcmV0dXJuIG1f
cmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7IH0KKyNlbHNlCisgICAgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXImIGNsYXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9CisjZW5kaWYKKworICAgIHN0cnVjdCBQYXJhbWV0
ZXJzIHsKKyAgICAgICAgc2l6ZV90IHBydW5lRW50cmllc0Rvd25UbyB7IDgwMCB9OworICAgICAg
ICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJpZXMgeyAxMDAwIH07CisgICAgICAgIE9wdGlvbmFs
PFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb247CisgICAgICAgIFNlY29uZHMgbWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIHsgMV9oIH07CisgICAgICAgIFNlY29u
ZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjYWNo
ZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9OworICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVD
b29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07CisgICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wg
c2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07
CisgICAgICAgIGJvb2wgc2hvdWxkU3VibWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9OworICAgIH07Cisg
ICAgY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1l
dGVyczsgfQorICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgb3BlcmF0aW5nRGF0ZXMoKSB7IHJl
dHVybiBtX29wZXJhdGluZ0RhdGVzOyB9CisgICAgY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+
JiBvcGVyYXRpbmdEYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW5nRGF0ZXM7IH0KKyAg
ICBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpIHsgcmV0dXJuIG1fZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQorICAgIGNvbnN0IFdhbGxUaW1lJiBlbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZkdyYW5kZmF0aGVy
aW5nVGltZXN0YW1wOyB9CisgICAgdm9pZCBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3Rh
bXAoKSB7IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsgfQorICAgIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlOyB9CisgICAgY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2U7IH0KKyAgICBib29sIGRlYnVnTG9n
Z2luZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQ7IH07Cisg
ICAgYm9vbCBkZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFi
bGVkOyB9CisgICAgYm9vbCBzdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZDsgfQorCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFj
ayB7IDUwIH07CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0Vu
YWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkICA9IGVu
YWJsZWQ7IH0KKyAgICBib29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7CisgICAg
dm9pZCBzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dp
bmdFbmFibGVkICA9IGVuYWJsZWQ7IH0KKyAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1v
dmVkKGJvb2wpOworICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8
dm9pZCgpPiYmKTsKKyAgICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOworICAgIHZv
aWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKKyAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNp
ZGVDb29raWVzKFNlY29uZHMpOworICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VD
YXAoKTsKKworICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgbV9zdG9yZTsKKyAg
ICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikK
KyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0NsYXNzaWZpZXI7CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7CisjZW5kaWYKKyNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2Fj
dGl2ZVBsdWdpblRva2VuczsKKyNlbmRpZgorICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwor
ICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOworICAgIFdhbGxUaW1l
IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBt
X2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RU
aW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZDsKKyAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHsgMCB9OworICAgIE9wdGlvbmFsPHVpbnQ2NF90
PiBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworICAgIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluIG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB7IFVS
TCB7IFVSTCgpLCAiaHR0cHM6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQub3JnIl9zIH0gfTsKKyAgICBi
b29sIG1fZGVidWdMb2dnaW5nRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RlYnVnTW9k
ZUVuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJs
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNl
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjlmN2U4
ZjBhMjBkYWZlYTlhYjI5ZTYwNzA3OGVmMTU3ZmIyYmJkYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmVDb2NvYS5tbQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1w
b3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgor
CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2ltcG9ydCA8V2ViQ29y
ZS9SZWdpc3RyYWJsZURvbWFpbi5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJ
Zk5lZWRlZCgpCit7CisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBpbml0T25jZTsKKworICAg
IGRpc3BhdGNoX29uY2UoJmluaXRPbmNlLCBeeworICAgICAgICBTZWNvbmRzIHRpbWVUb0xpdmVV
c2VySW50ZXJhY3Rpb24oW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91
YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24iXSk7CisgICAgICAgIGlmICh0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID4gMF9zICYmIHRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPD0gMjRfaCAqIDMwKQorICAgICAgICAgICAgc2V0VGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbih0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTsKKworICAg
ICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIl0pOworICAg
ICAgICBpZiAobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID4gMF9zICYmIG1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA8IDFfaCkKKyAgICAgICAgICAgIHNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwpOworCisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1l
KFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJl
c291cmNlTG9hZFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiXSk7CisgICAgICAgIGlmIChn
cmFuZGZhdGhlcmluZ1RpbWUgPiAwX3MgJiYgZ3JhbmRmYXRoZXJpbmdUaW1lIDw9IDI0X2ggKiA3
KQorICAgICAgICAgICAgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKGdyYW5kZmF0aGVyaW5nVGltZSk7
CisKKyAgICAgICAgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShbW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiSXRwRGVidWdNb2RlIl0p
OworICAgICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tOU1VzZXJE
ZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiSXRwTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UiXTsKKyAgICAgICAgaWYgKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UpIHsKKyAgICAgICAgICAgIFVSTCB1cmwgeyBVUkwoKSwgZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSB9OworICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiaHR0cDovLyIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOworICAgICAgICAgICAgICAgIHVybCA9IHsgVVJM
KCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHVybC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JE
ZWJ1Z01vZGUoUmVnaXN0cmFibGVEb21haW4geyB1cmwgfSk7CisgICAgICAgIH0KKworICAgICAg
ICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NDYWNoZU1heEFnZUNhcCJdKTsKKyAgICAgICAgaWYgKGNhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzID4gMF9zICYmIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVz
b3VyY2VzIDw9IDI0X2ggKiAzNjUpCisgICAgICAgICAgICBzZXRDYWNoZU1heEFnZUNhcChjYWNo
ZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk7CisgICAgICAgIAorICAgICAgICBTZWNv
bmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2Vy
RGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGllbnRTaWRl
Q29va2llc0FnZUNhcCJdKTsKKyAgICAgICAgaWYgKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwID4g
MF9zICYmIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwIDw9IDI0X2ggKiAzNjUpCisgICAgICAgICAg
ICBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhjbGllbnRTaWRlQ29va2llc0FnZUNhcCk7
CisgICAgfSk7Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IDY1NWQxMWU5YjVjNmNhZGE3YzliNTI1MzY5YzRm
ZTVjYTg0MmZkZjAuLmNiZWQ0YTk2N2VmOWMwMDYxNjE3OTVmNzlmOTIyYTIwMWNhYmZiOTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9j
ZXNzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZS5oIgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5o
IgpAQCAtNDgsNiArNDksOSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFi
YXNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KICNpbmNsdWRlIDx3
dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVy
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC04Niw4ICs5MCw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkKGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQodmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAg
ICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCh2YWx1ZSk7CiAgICAgfSk7CiB9CiAKQEAgLTk2LDkgKzEwMCw5IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkKGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAK
ICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7Ci0gICAgICAgIAorICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1ZSk7CisKICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMDgsOCArMTEyLDgg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHMKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlz
dGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIAogICAgICAgICBw
b3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTEy
MCw4ICsxMjQsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hv
dWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wgdmFsdWUpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZFN1Ym1pdFRlbGVt
ZXRyeSh2YWx1ZSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwogICAg
IH0pOwogfQogCkBAIC0xNDEsMTMgKzE0NSwyMiBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShOZXR3b3JrU2Vzc2lvbiYgbgog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMs
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkgPSByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1f
c3RhdGlzdGljc1F1ZXVlKTsKLSAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFr
ZV91bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1v
cnlTdG9yZSwgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkpOworICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5pVFBEYXRhYmFzZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUg
PSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigq
dGhpcywgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnkp
OworCisgICAgICAgICAgICBhdXRvIG1lbW9yeVN0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSk7
CisgICAgICAgICAgICBhdXRvIHBlcnNpc3RlbnRTdG9yZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbWVtb3J5U3RvcmUsIG1fc3Rh
dGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsKKworICAgICAg
ICAgICAgZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0
YXRpc3RpY3NTdG9yZS5nZXQoKSkucG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoKm1lbW9yeVN0b3Jl
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBt
X3N0YXRpc3RpY3NRdWV1ZSk7CisgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlID0gc3Rk
OjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+KGRv
d25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKm1fc3RhdGlzdGljc1N0
b3JlKSwgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rvcnkp
OworICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUUoMTkzMjk3KTogVGhpcyBzaG91bGQgYmUg
cmV2aXNlZCBhZnRlciB0aGUgVUlQcm9jZXNzIHZlcnNpb24gZ29lcyBhd2F5LgotICAgICAgICBt
X21lbW9yeVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOworICAgICAgICBtX3N0YXRp
c3RpY3NTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB9KTsKLSAgICAKKwog
ICAgIG1fZGFpbHlUYXNrc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwogfQogCkBAIC0xNzYs
NyArMTg5LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5k
RGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKIAotICAgIGlmICghbV9wZXJzaXN0ZW50U3RvcmFnZSAmJiAhbV9tZW1vcnlTdG9yZSkKKyAg
ICBpZiAoIW1fcGVyc2lzdGVudFN0b3JhZ2UgJiYgIW1fc3RhdGlzdGljc1N0b3JlKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZGVzdHJveSB0aGUgcGVyc2lzdGVudCBz
dG9yZSBvbiB0aGUgYmFja2dyb3VuZCBxdWV1ZSBhbmQgd2FpdCBmb3IgaXQgdG8gZGllCkBAIC0x
ODYsNyArMTk5LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNo
QW5kRGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCiAgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9y
ZTsKICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goWyZzZW1hcGhvcmUsIHRoaXNdIHsK
ICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbWVtb3J5
U3RvcmUgPSBudWxscHRyOworICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZSA9IG51bGxwdHI7CiAg
ICAgICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKICAgICBzZW1hcGhvcmUud2FpdCgp
OwpAQCAtMTk3LDggKzIxMCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTIwOCw4ICsyMjEsOCBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHko
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShkb21haW4pOworICAgICAgICBp
ZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0
UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0yMTksOCAr
MjMyLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3Rh
dGlzdGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5k
RGF0YVJlY29yZHMoKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsK
ICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
fSk7CiB9CkBAIC0yMzgsMTcgKzI1MSwxOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNvcgogICAg
IC8vIGNvbWluZyBmcm9tIElQQy4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBvbmx5IGNvbnRhaW5z
IHN0cmluZ3Mgd2hpY2ggYXJlIHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcK
ICAgICAvLyBhcyBub2JvZHkgb24gdGhpcyB0aHJlYWQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhv
c2Ugc3RyaW5ncy4KICAgICBwb3N0VGFzayhbdGhpcywgb3JpZ2lucyA9IFdURk1vdmUob3JpZ2lu
cyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYg
KCFtX3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IG1fbWVtb3J5U3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICAg
ICAgYXV0byYgbWVtb3J5U3RvcmUgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7CisgICAgCisgICAgICAgIG1lbW9yeVN0b3Jl
Lm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKIAogICAgICAgICAvLyBXZSBjYW4g
Y2FuY2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgdG8gcHJvY2VzcyBzdGF0aXN0aWNzIHNpbmNlIHdl
J3JlIGRvaW5nIGl0IHN5bmNocm9ub3VzbHkgYmVsb3cuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUt
PmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKyAgICAgICAgbWVt
b3J5U3RvcmUuY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwogCiAg
ICAgICAgIC8vIEZpcmUgYmVmb3JlIHByb2Nlc3Npbmcgc3RhdGlzdGljcyB0byBwcm9wYWdhdGUg
dXNlciBpbnRlcmFjdGlvbiBhcyBmYXN0IGFzIHBvc3NpYmxlIHRvIHRoZSBuZXR3b3JrIHByb2Nl
c3MuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9
KTsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jk
cygpOworICAgICAgICBtZW1vcnlTdG9yZS51cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7
CisgICAgICAgIG1lbW9yeVN0b3JlLnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsK
ICAgICB9KTsKIH0KIApAQCAtMjU4LDE3ICsyNzMsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHMKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMs
IHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1l
RG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0
aWNzU3RvcmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aGFzU3RvcmFnZUFj
Y2VzcyhzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgaGFzU3Rv
cmFnZUFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBoYXNTdG9yYWdlQWNjZXNz
XSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3Jh
Z2VBY2Nlc3MpOworCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgeworICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRv
cEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgewor
ICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAg
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VBY2Nlc3MpOworICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICB9
CiAgICAgfSk7CiB9CiAKQEAgLTMyNSwxOCArMzQzLDIwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURv
bWFpCiAgICAgfQogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJh
bWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4u
aXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUp
IHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IG1fbWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21h
aW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIHBy
b21wdEVuYWJsZWQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShTdG9yYWdlQWNjZXNzU3RhdHVzIHN0YXR1cykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBw
b3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBzdGF0dXNdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoc3RhdHVzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAg
ICBtX3N0YXRpc3RpY3NTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFt
ZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJ
RCwgcHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVzKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBzdGF0dXNdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzQ4LDggKzM2
OCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFn
ZUFjY2Vzc1VuZGVyT3BlbmVyKFJlZ2lzdHJhYmxlCiAgICAgLy8gY29taW5nIGZyb20gSVBDLiBT
dHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBhcyBsb25nIGFz
IG5vYm9keSBvbiB0aGlzIHRocmVhZCBob2xkcyBhIHJlZmVyZW5jZQogICAgIC8vIHRvIHRob3Nl
IHN0cmluZ3MuCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyA9IFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFnZUlELCBv
cGVuZXJEb21haW4gPSBXVEZNb3ZlKG9wZW5lckRvbWFpbildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0
b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyksIG9wZW5lclBhZ2VJRCwgV1RGTW92ZShvcGVuZXJEb21haW4pKTsKKyAgICAgICAgaWYgKG1f
c3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnJlcXVlc3RT
dG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MpLCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyRG9tYWluKSk7CiAgICAgfSk7CiB9CiAK
QEAgLTM1NywxOCArMzc3LDIwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpncmFudFN0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiB7CiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21h
aW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BG
cmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0
ZWROb3csIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1f
c3RhdGlzdGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3Jh
bnRTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1l
RG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdhc0dyYW50ZWRBY2Nl
c3MpIG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10oKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNz
KTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRp
c3RpY3NTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBX
VEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRO
b3csIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29s
IHdhc0dyYW50ZWRBY2Nlc3MpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVw
bHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHdhc0dy
YW50ZWRBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKHdhc0dyYW50ZWRBY2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTM5Nyw5ICs0
MTksOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0
d29ya1Byb2Nlc3MoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0
VGFzayhbdGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmICgh
bV9zdGF0aXN0aWNzU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbWVtb3J5
U3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIH0pOwogfQogCkBAIC00MjMsMTEg
KzQ0NSwxMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyZm9ybURh
aWx5VGFza3MoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRl
SWZOZWNlc3NhcnkoKTsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0
VGVsZW1ldHJ5KCk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgeworICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNz
YXJ5KCk7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0
VGVsZW1ldHJ5KCk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtNDM2LDggKzQ1Nyw4IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdWJtaXRUZWxlbWV0cnkoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0g
ICAgICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVB
bmRTdWJtaXQoKm1fbWVtb3J5U3RvcmUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUg
JiYgaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0aWNzU3Rv
cmUpKQorICAgICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2Fs
Y3VsYXRlQW5kU3VibWl0KGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZT4oKm1fc3RhdGlzdGljc1N0b3JlKSk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC00NzYsMjcgKzQ5NywyNiBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0
IFdlYkZyYW1lUHJveHkmIGZyYQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWlu
LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFt
ZSkKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWluID0gdGFyZ2V0RG9tYWluLmlz
b2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGlzUmVkaXJl
Y3QsIGlzTWFpbkZyYW1lXSB7Ci0KLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5sb2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0RG9tYWluLCB0b3BG
cmFtZURvbWFpbiwgc291cmNlRG9tYWluLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CisgICAg
ICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3Jl
LT5sb2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgc291cmNl
RG9tYWluLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9t
YWluID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZy
YW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRp
bmcodGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nU3Vi
cmVzb3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsK
IAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJl
c291cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1
YlJlc291cmNlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BG
cmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWlu
ID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmco
dGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nU3VicmVz
b3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsKIAog
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKQEAgLTUwNSw5ICs1MjUsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRhcmdldERvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4u
aXNvbGF0ZWRDb3B5KCksIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHko
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5sb2dTdWJyZXNvdXJjZVJlZGlyZWN0KHNvdXJjZURvbWFpbiwgdGFyZ2V0RG9tYWluKTsK
LQorICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+bG9nU3VicmVzb3VyY2VSZWRpcmVjdChzb3VyY2VEb21haW4sIHRhcmdldERvbWFp
bik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtNTE3LDggKzUzNiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21h
aW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbik7
CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlLT5sb2dVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01MjgsOCArNTQ3
LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVy
YWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRD
b3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1v
cnlTdG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmNsZWFyVXNlcklu
dGVyYWN0aW9uKGRvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNTM3LDcgKzU1Niw3IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdp
c3RyYWJsZURvbWFpCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9zdFRh
c2soW3RoaXMsIGRvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFp
bikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX3N0YXRpc3Rp
Y3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWlu
KSA6IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYWRVc2VySW50ZXJhY3Rpb24pOwogICAg
ICAgICB9KTsKQEAgLTU0OSw4ICs1NjgsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbgogICAg
IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRv
bWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRMYXN0U2Vlbihkb21h
aW4sIHNlY29uZHMpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAg
ICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0TGFzdFNlZW4oZG9tYWluLCBzZWNvbmRzKTsKICAgICAg
ICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CkBAIC01NjAsOCArNTc5LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFp
bi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pOworICAgICAg
ICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+
c2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01NzEsOCArNTkwLDggQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZUQKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
CiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGlj
c1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTU4Miw3ICs2MDEsNyBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxl
dGlvbkhhbmRsZQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG1fbWVtb3J5U3RvcmUgPyBtX21l
bW9yeVN0b3JlLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIDogZW1wdHlTdHJpbmcoKTsK
KyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0aXN0aWNz
U3RvcmUtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBlbXB0eVN0cmluZygpOwogICAg
ICAgICBwb3N0VGFza1JlcGx5KFtyZXN1bHQgPSByZXN1bHQuaXNvbGF0ZWRDb3B5KCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwogICAgICAgICB9KTsKQEAgLTU5
NCw3ICs2MTMsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbgogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlID0gbV9t
ZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6
IGZhbHNlOworICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX3N0YXRpc3RpY3NT
dG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1ByZXZhbGVudFJlc291cmNlKGRvbWFpbikgOiBm
YWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNQcmV2YWxlbnRSZXNvdXJjZSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUHJldmFsZW50UmVzb3VyY2UpOwogICAgICAg
ICB9KTsKQEAgLTYwNiw3ICs2MjUsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEbwogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFp
biA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UgPSBtX3N0YXRpc3RpY3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHko
W2lzVmVyeVByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICB9KTsKQEAgLTYxOCw3ICs2Mzcs
OCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNvdXJj
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFpbikgOiBmYWxzZTsK
KyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBtX3N0YXRpc3Rp
Y3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKQorICAgICAgICAgICAgOiBmYWxz
ZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVy
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKTsKICAgICAgICAgfSk7CkBAIC02MzAsNyArNjUwLDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25z
dCBSZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRh
c2soW3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gbV9tZW1vcnlTdG9yZSA/IG1f
bWVtb3J5U3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZURvbWFpbiwg
dG9wRnJhbWVEb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJG
cmFtZVVuZGVyID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNSZWdp
c3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikKKyAg
ICAgICAgICAgIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUmVnaXN0
ZXJlZEFzU3ViRnJhbWVVbmRlcik7CiAgICAgICAgIH0pOwpAQCAtNjQyLDcgKzY2Myw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8oY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5SZWRpcmVjdGVkRnJvbSA9IGRvbWFpblJlZGlyZWN0
ZWRGcm9tLmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVj
dGVkVG8uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRvKSA6
IGZhbHNlOworICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fc3Rh
dGlzdGljc1N0b3JlID8gbV9zdGF0aXN0aWNzU3RvcmUtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3Rp
bmdUbyhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRvKQorICAgICAgICAg
ICAgOiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNS
ZWRpcmVjdGluZ1RvKTsKICAgICAgICAgfSk7CkBAIC02NTQsOCArNjc2LDggQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
UmVnaXN0cmFibGVEb20KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAg
IHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJQ
cmV2YWxlbnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShk
b21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KQEAgLTY2NSw4ICs2ODcsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
ZAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywg
ZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmVk
KGRvbWFpbiwgdmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJlZChkb21haW4sIHZhbHVlKTsK
ICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAg
fSk7CiB9CkBAIC02NzYsNyArNjk4LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG8KICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGRvbWFpbiA9IGRvbWFpbi5p
c29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQg
PSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNHcmFuZGZhdGhlcmVkKGRvbWFpbikg
OiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQgPSBtX3N0YXRpc3RpY3NTdG9y
ZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc0dyYW5kZmF0aGVyZWQoZG9tYWluKQorICAgICAgICAg
ICAgOiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVkLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNHcmFuZEZhdGhlcmVkKTsKICAgICAgICAg
fSk7CkBAIC02ODgsOCArNzExLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3QKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdWJGcmFtZURvbWFpbiA9
IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbik7CiAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0p
OwogfQpAQCAtNjk5LDggKzcyMiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnCiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21h
aW4gPSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0
b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKTsKKyAg
ICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3Rv
cmUtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbiwg
dG9wRnJhbWVEb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTcxMCw4ICs3MzMsOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9z
dFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCks
IGRvbWFpblJlZGlyZWN0ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRlZENvcHkoKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21l
bW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oc3VicmVzb3VyY2VEb21h
aW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkK
KyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0VG8oc3VicmVzb3VyY2VEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHBv
c3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAt
NzIxLDggKzc0NCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21haW4gPSBzdWJy
ZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3RlZEZyb20gPSBkb21h
aW5SZWRpcmVjdGVkRnJvbS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYg
KG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0RnJvbShzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZEZy
b20pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRp
c3RpY3NTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oc3VicmVzb3VyY2VE
b21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC03MzIsOCArNzU1LDggQEAg
dm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBSZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVjdGVkVG8uaXNvbGF0ZWRD
b3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKHRvcEZyYW1lRG9t
YWluLCBkb21haW5SZWRpcmVjdGVkVG8pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8pOwogICAgICAgICBwb3N0VGFz
a1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTc0Myw4
ICs3NjYsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJh
bWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaXN0cgogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21h
aW4uaXNvbGF0ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVkaXJlY3Rl
ZEZyb20uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0
b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dEZyb20odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKKyAgICAgICAgaWYg
KG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVk
RnJvbSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgIH0pOwogfQpAQCAtNzU1LDEzICs3NzgsMTcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhh
bmQKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMs
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3RhdGlz
dGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX21l
bW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKworICAgICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwogICAgIH0pOwogfQog
CkBAIC03NzAsMTQgKzc5NywxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZUZvckRvbWFpbnMoY29ucwogICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxs
ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9t
YWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAg
aWYgKCFtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMo
ZG9tYWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENh
bGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsKKworICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+dXBkYXRl
Q29va2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdh
dG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwogICAgIH0pOwogfQog
CkBAIC03ODYsMTQgKzgxNiwxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVDbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0CiAgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwog
ICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3Rp
Y3NTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21l
bW9yeVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAg
ICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRl
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRh
YmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAg
ICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhk
b21haW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYo
KV0oKSB7IH0pOwogICAgIH0pOwogfQogCkBAIC04MDQsMjIgKzgzNywyNyBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudChTaG91bGRHcgogICAgICAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkKICAgICAgICAg
ICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPmNsZWFyKCk7CiAKLSAgICAgICAgQ29tcGxldGlvbkhh
bmRsZXJDYWxsaW5nU2NvcGUgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIoW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlm
ICghbV9zdGF0aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhl
ciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBiZWlu
ZyBjbGVhcmVkLCBtX3N0YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5k
ZmF0aGVyIGRhdGEuIik7CisKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpIHsKLSAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVk
VGhpcy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjb21wbGV0aW9uSGFuZGxlckNhbGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9y
ZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwg
c2hvdWxkR3JhbmRmYXRoZXIsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRv
ci5jb3B5UmVmKCldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGlmIChzaG91bGRHcmFu
ZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShjb21wbGV0aW9uSGFu
ZGxlckNhbGxlci5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0aXN0
aWNzU3RvcmUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Z3Jh
bmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3Zl
KGNhbGxiYWNrQWdncmVnYXRvcildKCkgbXV0YWJsZSB7IH0pOwogICAgICAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUg
aXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dCBBZnRlciBiZWluZyBjbGVhcmVkLCBtX3N0YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5
aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRo
ZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpCi0gICAgICAgICAgICAgICAg
UkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBCZWZvcmUgYmVp
bmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0
aGVyIGRhdGEuIik7CiAgICAgICAgIH0KICAgICB9KTsKIH0KQEAgLTgzNyw4ICs4NzUsOCBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbihTZWNvbmRzIHNlY29uZAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAgICAgcG9zdFRhc2soW3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0
b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbihzZWNvbmRzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25k
cyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtODQ3LDggKzg4NSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2VjCiB7
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vj
b25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1v
cnlTdG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMp
OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMp
OwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwpAQCAtODU4LDggKzg5Niw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25k
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+c2V0R3JhbmRmYXRoZXJpbmdUaW1lKHNlY29uZHMpOworICAgICAgICBpZiAobV9zdGF0
aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRo
ZXJpbmdUaW1lKHNlY29uZHMpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtOTAzLDggKzk0MSw4IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3Qg
bWF4aW11bUVudHJ5CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0
VGFzayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVz
KG1heGltdW1FbnRyeUNvdW50KTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1heGlt
dW1FbnRyeUNvdW50KTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTkxNSw4ICs5NTMsOCBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRh
cmdldENvdQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhb
dGhpcywgcHJ1bmVUYXJnZXRDb3VudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQot
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFy
Z2V0Q291bnQpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBt
X3N0YXRpc3RpY3NTdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFyZ2V0Q291bnQp
OwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwpAQCAtOTI3LDggKzk2NSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhCiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlc2V0
UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3Rv
cmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZh
dWx0VmFsdWVzKCk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmgKaW5kZXggMDYzNDM4NWMxMGIzMjQxODQxMjg4ZmY4NDE5MWQ5MjgyNTk4YjhkMS4u
MGExYTMwM2NkZjg2NTMyNmQyODFjOTE1YmJmNDJkZmRjNWY3ZWU1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtNTIsNyArNTIsNyBAQCBlbnVt
IGNsYXNzIFNob3VsZFNhbXBsZSA6IGJvb2w7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
TmV0d29ya1Nlc3Npb247Ci1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7
CitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiBjbGFzcyBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xhc3Mg
V2ViUHJvY2Vzc1Byb3h5OwpAQCAtMTg5LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAKICAgICBXZWFr
UHRyPE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9uOwogICAgIFJlZjxXb3JrUXVldWU+
IG1fc3RhdGlzdGljc1F1ZXVlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU+IG1fbWVtb3J5U3RvcmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9zdGF0aXN0aWNzU3RvcmU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJz
aXN0ZW50U3RvcmFnZTsKIAogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZT4gbV9kYWlseVRhc2tzVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGZmY2E5YmM2M2U5ZDIyZmE1NmY4YjJj
NGUxZWM1YTE1M2YzOWYyNDEuLmZhNGI0ZDU5YWYwYzkxODA4M2Q5NjM2NzRhNDRkZGIyNTNkYTFh
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNl
c3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY2hlbWVSZWdpc3Ry
eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8
d3RmL0FsZ29yaXRobXMuaD4KQEAgLTMyOSw2ICszMzAsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmJgogICAgIH0KICNlbmRpZgogCisgICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJVFBEYXRhYmFzZUVuYWJsZWQocGFyYW1ldGVycy5zaG91
bGRFbmFibGVJVFBEYXRhYmFzZSk7CisKICAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdv
cmtTZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogICAgIGZvciAo
Y29uc3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVy
cy5wZW5kaW5nQ29va2llcykKICAgICAgICAgZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdl
U2Vzc2lvbigpLnNldENvb2tpZShjb29raWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmNwcAppbmRleCBjNmRmMDhlOWZiNzc2NmY3NzBhZmFkZWYxYWE3ZjIxMjk0OWQxZjU1Li4wODcx
NTBhMWQ1MjFhNTI0ZWNiZDhiNWQ5YTFiNDg2M2FmMTZhNTE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcApAQCAtOTMsNiArOTMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogI2lm
IEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4
dGVuc2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5kbGUgPDwgc2hv
dWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKICNlbmRpZgor
ICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiB9CiAKIGJvb2wgTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIs
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0yMTcsNiArMjE4
LDkgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6
RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2Vu
ZGlmCiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRh
YmFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMmZkM2JlOWZkZWQ5ODBiNzU3M2NlM2I1
MTZiMDdhOTZmYWRhZjczYi4uZmM5MDBjMmVkN2YwY2VmYjE4MjkwYzQwZjgwMzVjY2ZlNWQ5Nzhm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTExLDYgKzExMSw3IEBAIHN0
cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gdXJsU2NoZW1lc1NlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlOwogICAgIGJvb2wgc2hvdWxkRGlz
YWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07CiAjZW5k
aWYKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9j
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
ci5jcHAKaW5kZXggZjFlYTc5MjlkNTMwN2YwNWRjMDY4MGY2NDc1NGE2OWY4M2U5ODU2Yi4uYjQ0
OTJhNGQyNDlmYzk3ZGNhOGFhM2QzMjNkMzUyNzliYWY2ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDEyIEBAIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291
cmNlUHJldmFsCiAgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSBy
ZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKTsKICAg
ICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHJlc291cmNlU3RhdGlz
dGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuc2l6ZSgpOwogICAgIGF1dG8gdG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUby5zaXplKCk7Ci0gICAgCisKKyAgICByZXR1cm4gY2FsY3VsYXRlUmVzb3Vy
Y2VQcmV2YWxlbmNlKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5z
Q291bnQsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgY3VycmVudFByZXZhbGVuY2Up
OworfQorCitSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFz
c2lmaWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UodW5zaWduZWQgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwg
dW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBSZXNvdXJjZUxvYWRQcmV2
YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNlKQorewogICAgIGlmICghc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluc0NvdW50CiAgICAgICAgICYmICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQKICAgICAgICAgJiYgIXN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaAppbmRleCBhY2YxZjM4OWRkNTFh
MDBjNTEwN2RjNjcyZjlkM2ZiYTlmMmJmZWYwLi41OGY1NjVhMTFhNzczNWQwNDEyOTNjYWJmNDFj
MjViYzY1NWQxOTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MiwxMCArNDIsMTEgQEAgcHVibGljOgogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgflJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFz
c2lmaWVyKCkgPSBkZWZhdWx0OwogICAgIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY2FsY3VsYXRl
UmVzb3VyY2VQcmV2YWxlbmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3Mm
IHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGN1cnJlbnRQcmV2YWxl
bmNlKTsKKyAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGNhbGN1bGF0ZVJlc291cmNlUHJldmFs
ZW5jZSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2ln
bmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY3VycmVudFByZXZhbGVuY2UpOwogcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQor
ICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwg
c3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKKyAgICAgICAgcmV0dXJuIGNsYXNz
aWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luc0NvdW50KTsKICAgICB9CiAgICAgYm9vbCBjbGFzc2lmeVdpdGhWZWN0b3JUaHJl
c2hvbGQodW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyQ29jb2EuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVy
L2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwCmluZGV4IGFj
ZmJlM2NkYmMxYzNhOTUxZjcyMzcwYmQ1OTg3ZTQ3MmU4ZDRjMjUuLmUxZjUzMDRlOTMyMjY4NGVj
NjA2MjZjNjMwMzk3NWYyM2QxYjhjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vY2xhc3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29h
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2EvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAKQEAgLTM1LDE1ICszNSwxNSBAQAog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllckNvY29hOjpjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmln
aW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5z
aWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQorYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hOjpjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50
KQogewogICAgIGlmICghY2FuVXNlQ29yZVByZWRpY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIGNs
YXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5z
Q291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRv
cEZyYW1lT3JpZ2luc0NvdW50KTsKKyAgICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRo
cmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50
KTsKIAogICAgIFZlY3Rvcjxzdm1fbm9kZT4gZmVhdHVyZXM7CiAKLSAgICBpZiAoc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQotICAgICAgICBmZWF0dXJlcy5hcHBlbmQoezEs
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50
KX0pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQpCisgICAg
ICAgIGZlYXR1cmVzLmFwcGVuZCh7MSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zQ291bnQpfSk7CiAgICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzVG9Db3VudCkKICAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsyLCBzdGF0aWNfY2FzdDxk
b3VibGU+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCl9KTsKICAgICBpZiAoc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzLnlhbWwKaW5kZXggMzZiZjhmNThjOTc4YzQzODNjNTg1Y2RmYThlNWZjNjFlMTIw
MWI3My4uYzNiNTY0NzgzMzQyNzcxYTRiNTI1YjcyZDZhZjA5YzdmMTRjY2E1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCkBAIC0xMzc5LDYgKzEzNzksMTQgQEAg
SXRwRGVidWdNb2RlRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiSW50ZWxs
aWdlbnQgVHJhY2tpbmcgUHJldmVudGlvbiBEZWJ1ZyBNb2RlIgogICB3ZWJjb3JlQmluZGluZzog
UnVudGltZUVuYWJsZWRGZWF0dXJlcwogCitJVFBEYXRhYmFzZUVuYWJsZWQ6CisgIHR5cGU6IGJv
b2wKKyAgZGVmYXVsdFZhbHVlOiBmYWxzZQorICBodW1hblJlYWRhYmxlTmFtZTogIklUUCBEYXRh
YmFzZSBCYWNrZW5kIgorICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJFbmFibGUgSW50ZWxs
aWdlbnQgVHJhY2tpbmcgUHJldmVudGlvbiBEYXRhYmFzZSBCYWNrZW5kIgorICB3ZWJjb3JlQmlu
ZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcworICBjYXRlZ29yeTogaW50ZXJuYWwKKwogU2Vy
dmljZVdvcmtlcnNFbmFibGVkOgogICB0eXBlOiBib29sCiAgIGRlZmF1bHRWYWx1ZTogREVGQVVM
VF9TRVJWSUNFX1dPUktFUlNfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNTljZWY4M2E1MjM5ZWVh
MGNhMTk3ZjY4Y2IzNzIwNjdiOTc5ZTAyOS4uMDQzNWE5NTBlZGZkMmFlNTFjNDNhYmQ4MWYwNTE5
NzI0NGVmN2VhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC00Miw4ICs0MiwxMCBAQCBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrU29ja2V0U3RyZWFtLmNwcAogTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCiBO
ZXR3b3JrUHJvY2Vzcy9QcmVjb25uZWN0VGFzay5jcHAKIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAogTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2UuY3BwCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNw
cAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYzQzZTRlNTA5MGJlZGM3MWM5ZGU2M2Y4Njdm
NzQwYTk0MWZkMGYxMi4uYzAwZmE1N2I5N2RhOTZmYjNkYWNjN2I0NjJkYTFkNGY0MzcxZmViZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtMjksNiArMjksNyBAQCBOZXR3b3JrUHJvY2Vzcy9j
b2NvYS9OZXR3b3JrRGF0YVRhc2tDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29y
a1Byb2Nlc3NDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2Nv
YS5tbQogCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZUNvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1RlbGVtZXRyeS5jcHAKIApAQCAtMzMyLDcgKzMzMyw2IEBAIFVJUHJvY2Vz
cy9Db2NvYS9NZWRpYUNhcHR1cmVVdGlsaXRpZXMubW0KIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0
aW9uU3RhdGUubW0KIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCiBVSVBy
b2Nlc3MvQ29jb2EvUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tCi1VSVByb2Nlc3MvQ29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KIFVJUHJvY2Vzcy9D
b2NvYS9TYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9TZXNzaW9u
U3RhdGVDb2RpbmcubW0KIFVJUHJvY2Vzcy9Db2NvYS9TeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNv
Y29hLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWJhNjI3NjY1MmUxZGY2ZmRhNGRkOGI1NzU0ZTNi
ZjAxYzM3NmQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZUNvY29hLm1tCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmUuaCIKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
Ci0KLSNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KLSNpbXBvcnQgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQotewotICAgIHN0YXRpYyBkaXNwYXRj
aF9vbmNlX3QgaW5pdE9uY2U7Ci0KLSAgICBkaXNwYXRjaF9vbmNlKCZpbml0T25jZSwgXnsKLSAg
ICAgICAgU2Vjb25kcyB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIl0pOwotICAgICAgICBpZiAodGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbiA+IDBfcyAmJiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uIDw9IDI0X2gg
KiAzMCkKLSAgICAgICAgICAgIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24odGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbik7Ci0KLSAgICAgICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10g
ZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbCJdKTsKLSAgICAgICAgaWYgKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCA+IDBfcyAmJiBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwgPCAxX2gpCi0gICAgICAgICAgICBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKLQotICAgICAgICBT
ZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGltZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRl
ZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzR3JhbmRmYXRoZXJp
bmdUaW1lIl0pOwotICAgICAgICBpZiAoZ3JhbmRmYXRoZXJpbmdUaW1lID4gMF9zICYmIGdyYW5k
ZmF0aGVyaW5nVGltZSA8PSAyNF9oICogNykKLSAgICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5n
VGltZShncmFuZGZhdGhlcmluZ1RpbWUpOwotCi0gICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1Z01vZGUoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIkl0cERlYnVnTW9kZSJdKTsKLSAgICAgICAgYXV0byogZGVidWdNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0
cmluZ0ZvcktleTpAIkl0cE1hbnVhbFByZXZhbGVudFJlc291cmNlIl07Ci0gICAgICAgIGlmIChk
ZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKSB7Ci0gICAgICAgICAgICBVUkwgdXJsIHsgVVJM
KCksIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgfTsKLSAgICAgICAgICAgIGlmICghdXJs
LmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHA6Ly8iKTsKLSAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKLSAg
ICAgICAgICAgICAgICB1cmwgPSB7IFVSTCgpLCBidWlsZGVyLnRvU3RyaW5nKCkgfTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
IHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKFJlZ2lzdHJhYmxlRG9tYWluIHsgdXJs
IH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcEZvclByZXZh
bGVudFJlc291cmNlcyhbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3Vi
bGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiXSk7Ci0gICAg
ICAgIGlmIChjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyA+IDBfcyAmJiBjYWNo
ZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyA8PSAyNF9oICogMzY1KQotICAgICAgICAg
ICAgc2V0Q2FjaGVNYXhBZ2VDYXAoY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMp
OwotICAgICAgICAKLSAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcChbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAiXSk7Ci0gICAgICAgIGlmIChj
bGllbnRTaWRlQ29va2llc0FnZUNhcCA+IDBfcyAmJiBjbGllbnRTaWRlQ29va2llc0FnZUNhcCA8
PSAyNF9oICogMzY1KQotICAgICAgICAgICAgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMo
Y2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOwotICAgIH0pOwotfQotCi19Ci0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KaW5kZXggOTg3NDZjMzdjNTI0Yzg3ODRiN2E2ZTgyNjY3NjY2NTE3NWY2ZmIwZC4uYmM5NDRm
MTIxMmJmOWZlNDBkYWY2MThiZDRlMzY4OTg1OTBjMzA4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0yOTYsNiAr
Mjk2LDggQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1By
b2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmEKICNpZiBFTkFCTEUoUFJPWElNSVRZX05F
VFdPUktJTkcpCiAgICAgcGFyYW1ldGVycy53aXJlbGVzc0NvbnRleHRJZGVudGlmaWVyID0gbV9j
b25maWd1cmF0aW9uLT53aXJlbGVzc0NvbnRleHRJZGVudGlmaWVyKCk7CiAjZW5kaWYKKworICAg
IHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9vbEZvcktl
eTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZl
cmVuY2VzS2V5OjppVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgp
XV07CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKaW5k
ZXggODg4M2Y3MzQ1Njc2OTQ0ZjQzYjM4ODAxYzVhNTFhYzA3MGIyNDViMS4uMTZiZDVjZDU4NTEz
YWZhZTliMDAyZDY5MjgyNzMyMGE2Njc3NDk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1
ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZVBvbGljaWVzRGF0YS5oIgogI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29s
LmNwcAppbmRleCA2OGExM2ZkYzZlZDk4OWRiOTliNGZlYzExODVkNzQwYzUwN2ZmMWI2Li45ODUy
OGUxNDFiNjFjMzk1YTVkM2U0YTNiZWIyZjBhZGZjZmU2YzNhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCkBAIC04Niw2ICs4Niw3IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9Qcm9jZXNzV2FybWluZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1
ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaD4KICNpbmNsdWRlIDxwYWwv
U2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IGI0N2JhOTFkZWU0MTExZWFkM2Y3NmI4YmMxMGI5MDU5ZDEwYTUzZTIuLjk3
MzU2MGQ0MjIzMmY3OWUxMTI5MmRlMTNiYmJiMjNhN2RhYWE1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzUyNyw2ICszNTI3LDgg
QEAKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9y
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5
QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc2MkI3NDg0MTIwQkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2Vz
UmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByZWZlcmVu
Y2VzUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTBENzg2MTIy
MDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuaDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjIyMjA3
OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlLmNwcDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTE1
MDY3MjFERDU2Mjk4MDAxRjRCNTggLyogY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNi
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9ICJjb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24u
c2IiOyBwYXRoID0gIkRlcml2ZWRTb3VyY2VzL1dlYktpdDIvY29tLmFwcGxlLldlYktpdC5wbHVn
aW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0Ex
RTJBODQxRUVGRTg4QTAwMzdBMEUwIC8qIEFQSU5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSU5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBM0FDRTFBMUVFRUY3OEMwMEE4NjRBNCAvKiBB
UElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTQ2LDYgKzM1NDgsOSBAQAogCQk3QTlDRDhDMjFDNzc5
QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDQxRUVBQUUy
MzAwMDM3QjJCIC8qIEFQSUljb25EYXRhYmFzZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBUElJY29uRGF0YWJhc2VDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0FCNkVBNDYxRUVBQjZCMDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJv
dmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJR2VvbG9jYXRpb25Q
cm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUNFODJFNzIyMUNBRTA2
MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0g
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTgyMjFDQUUwNzAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
QUNFODJFOTIyMURFNzIyMDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29j
b2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVD
b2NvYS5tbTsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29j
b2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjFFMUU3OUEzQjQwMDQz
OEEwNSAvKiBXZWJFcnJvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViRXJyb3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MUYx
RTc5QTNEODAwNDM4QTA1IC8qIFdlYkVycm9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFcnJvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2
MjIxRTc5QTQzMTAwNDM4QTA1IC8qIFdlYkVycm9yc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXJyb3JzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNjk2LDcgKzM3MDEsNiBAQAogCQk4MzcyREIyNjFBNjc1NjI4MDBD
Njk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdD
NSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJEQjJFMUE2NzdENEEwMEM2OTdDNSAvKiBXS0RpYWdu
b3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0RpYWdub3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4MzdBNjYwMDIwRTJBRDg0MDBBOURCRDggLyogUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNjIxQTY4QjM0MjAwMzBGMzg2IC8qIEFQSURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQ
SURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTgzODkxQjY4MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IF9XS0RpYWdub3N0aWNMb2dnaW5n
RGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNkExQTY4QzMw
QjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC01MzIxLDcgKzUzMjUsNiBAQAogCQkJCUNEQTI5QTFFMUNCRUI1RkIw
MDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkuaCAqLywKIAkJCQlDREEyOUEy
MjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluICovLAogCQkJCUNEQTI5QTFGMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkubW0gKi8sCi0JCQkJODM3QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4IC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tICovLAogCQkJCTVDQTk4NTRCMjEw
QkVCNzMwMDU3RUI2QiAvKiBTYWZlQnJvd3NpbmdXYXJuaW5nQ29jb2EubW0gKi8sCiAJCQkJMUEw
MDJENDcxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5oICovLAogCQkJCTFB
MDAyRDQ2MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcubW0gKi8sCkBAIC02
OTIzLDEwICs2OTI2LDE1IEBACiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lm
aWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3QTBE
Nzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuY3BwICovLAorCQkJCTdBMEQ3ODYxMjIwNzkxRUMwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oICovLAogCQkJCTdBRkJEMzY0MjFFNTFCQUIwMDVEQkFD
QiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwICovLAogCQkJCTdBRkJE
MzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aCAqLywKIAkJCQk3QUZCRDM2OTIxRTU0MkU4MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCAqLywKIAkJCQk3QUZCRDM2ODIxRTU0MkU4MDA1REJB
Q0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmggKi8sCisJCQkJ
N0FDRTgyRTgyMjFDQUUwNzAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5j
cHAgKi8sCisJCQkJN0FDRTgyRTcyMjFDQUUwNjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oICovLAorCQkJCTdBQ0U4MkU5MjIxREU3MjIwMDBEQTk0QyAvKiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLywKIAkJCQk3QTQxRTlGQTIxRjgxREFDMDBC
ODhDREIgLyogU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmggKi8sCiAJCQkJN0EzRkVDQTEy
MUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCAqLywKIAkJCQk3QTg0M0Ex
QTIxRTQxRkIyMDBERUY2NjMgLyogV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAq
LywKQEAgLTEwNzkyLDcgKzEwODAwLDYgQEAKIAkJCQkyRDkxMzQ0NDIxMkNGOUYwMDAxMjhBRkQg
LyogTmV0c2NhcGVQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MkE3OTYyMTJCNkFE
QTAwRjQ5M0ZEIC8qIE5ldHNjYXBlUGx1Z2luTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJEOTEzNDQ1MjEyQ0Y5RjAwMDEyOEFGRCAvKiBOZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk2QkQwNTg2NjIyMENFOEMyMDAwQkVENUMgLyogTmV0d29ya0FkQ2xp
Y2tBdHRyaWJ1dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUREOUYyODE2MzY3REEyMDAx
NTc4RTkgLyogTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNTJGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIE5ldHdvcmtD
b250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxRjA2MEUxMTY1NDMxODUwMEYzMjgzRiAvKiBOZXR3b3JrTUROU1JlZ2lzdGVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363513</attachid>
            <date>2019-03-04 08:24:07 -0800</date>
            <delta_ts>2019-03-04 14:51:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194867-20190304082406.patch</filename>
            <type>text/plain</type>
            <size>284384</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2VhYmI3NmFjYjIzMDhm
MjllZTdjYzNhOTAyMzVkNWZlOTI4NDc1Ni4uMDJjZjNmZTMzZGFkOGVhMjAwYjY3MTBjOGM5YTAw
MTU3MjI5YWE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBv
cnQgdXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxz
byBleHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdl
YkNvcmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0
ZXN0cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAg
ICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRh
YmFzZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0
YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIw
MTktMDMtMDQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4IHRoZSBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDFmNTFiZTg0MDRmNDEwMzg1NzM5YTI1NDgx
YmMxMWRjMzkyZDFiYi4uZjkxMzQ5Nzg2ZDE0NjhlZDFhNTIzMzNjOTRhOGZkZDc1OWU2ZGEwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyODMgQEAKKzIwMTktMDItMjEgIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGEgU1FMaXRlIGRhdGFiYXNlIHRvIGhv
bGQgdGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODY3CisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS8yNDI0MDg1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkYXRhYmFzZSBwbGlzdCBpcyBpbmVmZmlj
aWVudC4gSXQgcmVxdWlyZXMgbW9yZSBtZW1vcnkgdXNlCisgICAgICAgIHRoYW4gaXQgbmVlZHMs
IGFuZCBmb3JjZXMgbG90cyBvZiBsb29waW5nIGFuZCBzdHJpbmcgY29tcGFyaXNvbnMgdG8gZmlu
ZCBpbmZvcm1hdGlvbi4KKworICAgICAgICBUaGlzIHByb2JsZW0gaGFzIGFscmVhZHkgYmVlbiBz
b2x2ZWQgaW4gdGhlIGZvcm0gb2YgcmVsYXRpb25hbCBkYXRhYmFzZXMuIFdlIHVzZSB0aGVtCisg
ICAgICAgIGVsc2V3aGVyZSBpbiBXZWJLaXQsIGFuZCBzaG91bGQgZG8gc28gZm9yIHRoaXMgc3Rv
cmFnZSBhcyB3ZWxsLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY3JlYXRlcyBhbiBvcHRpb25hbCBT
UUxpdGUgZGF0YWJhc2UgdG8gaGFuZGxlIElUUCBvcGVyYXRpb25zLgorCisgICAgICAgIDEuIEl0
IGFkZHMgYSBuZXcgaW50ZXJuYWwgZXhwZXJpbWVudGFsIGZlYXR1cmUgZmxhZyB0byBhY3RpdmF0
ZSBpdC4gSXQgcmVxdWlyZXMgdGhlIHVzZXIKKyAgICAgICAgICAgZXhpdCBhbmQgcmVzdGFydCB0
aGUgcHJvY2VzcyB0byB0YWtlIGVmZmVjdC4KKyAgICAgICAgMi4gSXQgcG9wdWxhdGVzIGl0c2Vs
ZiBmcm9tIHRoZSBleGlzdGluZyBwbGlzdCBmaWxlIChpZiBpdCBleGlzdHMpLgorICAgICAgICAz
LiBJdCBzdG9wcyB1c2luZyB0aGUgcGxpc3QgaW4gZmF2b3Igb2YgdGhlIGRhdGFiYXNlLgorICAg
ICAgICA0LiBJdCBkb2VzIHF1ZXJpZXMgYW5kIG90aGVyIG9wZXJhdGlvbnMgdXNpbmcgdGhlIGRh
dGFiYXNlIGluc3RlYWQgb2YgdGhlIG9sZCBoYXNoIHRhYmxlCisgICAgICAgICAgIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGlzaXRpbmcgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIGNsYXNzIGludG8gYSBiYXNlCisgICAgICAg
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBjbGFzcywgd2hpY2ggUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlIGlzIGJhc2VkIG9uLgorICAgICAgICBJdCBhZGRzIGEgbmV3IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4g
dGVybXMgb2YgU1FMCisgICAgICAgIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgY29kZSBj
aGFuZ2VzIHNob3VsZCBub3QgaGF2ZSBhbnkgaW1wYWN0IG9uIGV4aXN0aW5nIG9wZXJhdGlvbnMs
IGFuZCB3aGVuIGVuYWJsZWQKKyAgICAgICAgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdGVzdCBy
ZXN1bHRzLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6Y3JlYXRlU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2Vy
dmVkRG9tYWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlbGF0aW9uc2hpcEV4aXN0cyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNo
aXApOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y29uZmlybURvbWFpbkRvZXNOb3RFeGlzdCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZyb21TdHJpbmcgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkYXRhYmFzZUlzRW1wdHkgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxh
dGVGcm9tTWVtb3J5U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5IGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3Jl
bWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZh
bGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6
OmJ1aWxkTGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCk6Cisg
ICAgICAgIChXZWJLaXQ6Omxpc3RUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNl
cyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZWNsYXNzaWZ5UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9y
YWdlSWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVl
c3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9y
YWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRv
bWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdh
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2Vy
SW50ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hh
ZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxl
bnQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21h
aW4gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVk
QXNTdWJGcmFtZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpj
bGVhclByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZhdGhlcmVkIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFt
ZVVuaXF1ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9t
YWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNsZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNvb2tpZVRyZWF0bWVudEZvck9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0
b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUNvb2tp
ZUJsb2NraW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckJsb2NraW5nU3Rh
dGVGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXZhbGVudERvbWFpbnMgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6ZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFVzZXJJbnRl
cmFjdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWlu
c1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlTGFz
dFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlbW92ZUFsbFN0b3Jh
Z2VBY2Nlc3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0VtcHR5IGNvbnN0KToKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNyZW1lbnRSZWNvcmRz
RGVsZXRlZENvdW50Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5bmNTdG9yYWdl
SWZOZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgor
ICAgICAgICAoV2ViS2l0Ojpkb21haW5zVG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpPcGVyYXRpbmdEYXRlOjp0b2RheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9w
ZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdEYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6bWVyZ2VPcGVyYXRpbmdEYXRlcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OmNvbXB1dGVJbXBvcnRhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRz
UmVtb3ZhbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVEYXRh
UmVjb3Jkcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3Jh
bmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldENhY2hlTWF4
QWdlQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xp
ZW50U2lkZUNvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWlu
Z1JlbW92ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpkZWJ1Z0xvZ0RvbWFpbnNJbkJh
dGNoZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpoYXNTdGF0aXN0aWNzRXhwaXJlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdv
cmtQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRhdGEgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzRGVidWdNb2RlRW5h
YmxlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c3RvcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NQcm9t
cHRzRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojpk
b21haW5zVG9TdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpmcm9tV2Fs
bFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjp0b2RheSk6CisgICAgICAg
IChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6flJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5jZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRh
UmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9k
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZO
ZWNlc3NhcnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRDYWNoZU1heEFn
ZUNhcCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBk
YXRlQ2FjaGVNYXhBZ2VDYXApOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDbGllbnRTaWRlQ29va2llc0Fn
ZUNhcCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hv
dWxkUmVtb3ZlRGF0YVJlY29yZHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDb29raWVCbG9ja2lu
Z0ZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNsZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNzRXBpcmF0
aW9uVGltZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6bWVyZ2VPcGVyYXRpbmdEYXRlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRp
c3RpY3NFeHBpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNU
b0RlZmF1bHRWYWx1ZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmxvZ1Rlc3RpbmdFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlYnVnTG9nRG9t
YWluc0luQmF0Y2hlcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5o
LgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdEYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc0VtcHR5IGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc0RlYnVn
TW9kZUVuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnN0b3JlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFi
bGVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZUNvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0uCisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJVc2VyRGVm
YXVsdHNJZk5lZWRlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91
bGRTdWJtaXRUZWxlbWV0cnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVy
c2lzdGVudFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdl
QWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRTdG9yYWdl
QWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpwZXJmb3JtRGFpbHlUYXNrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJj
ZUxvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0hh
ZFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlz
UHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNl
VW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZh
bGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJs
b2NraW5nVXBkYXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVs
ZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAg
IChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGlj
c0VudHJpZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVyczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9jbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNlUHJl
dmFsZW5jZSk6CisgICAgICAgICogUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1s
OgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKiBX
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0wMy0wNCAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gRW5hYmxl
IHdlYiBwcm9jZXNzIHNhbmRib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgKaW5kZXggNTRmYjZiYjc5MDFhZTFkZGE0MmU3N2NlZmUzN2FkNDljYjZlODg5
Yi4uOGM2MGIyYTlmZGE2MDljZjMxYjgwNDU1OTEyY2U1N2MzNmMwMTIwYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFibGVk
KSB7IG1faXRwRGVidWdNb2RlID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01vZGVF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQgc2V0
SVRQRGF0YWJhc2VFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNJVFBEYXRhYmFzZUVuYWJs
ZWQgPSBpc0VuYWJsZWQ7IH0KKyAgICBib29sIGlUUERhdGFiYXNlRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNJVFBEYXRhYmFzZUVuYWJsZWQ7IH0KKwogICAgIHZvaWQgc2V0UmVzdHJpY3Rl
ZEhUVFBSZXNwb25zZUFjY2Vzcyhib29sIGlzRW5hYmxlZCkgeyBtX2lzUmVzdHJpY3RlZEhUVFBS
ZXNwb25zZUFjY2VzcyA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgcmVzdHJpY3RlZEhUVFBSZXNw
b25zZUFjY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1faXNSZXN0cmljdGVkSFRUUFJlc3BvbnNlQWNj
ZXNzOyB9CiAKQEAgLTUzNCw2ICs1MzcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tb3VzZW1v
dmVFdmVudEhhbmRsaW5nUHJldmVudHNEZWZhdWx0RW5hYmxlZCB7IGZhbHNlIH07CiAjZW5kaWYK
IAorICAgIGJvb2wgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCB7IGZhbHNlIH07CisKICAgICBmcmll
bmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxSdW50aW1lRW5hYmxlZEZlYXR1cmVzPjsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFz
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKaW5kZXgg
NDBmY2UwNjQ0MDQ1MTM3NGQ0NjQ5MzBhZjQ2YzkwNzczZTNmODZhNC4uNjQzZDI0MjY3NjlmZjQw
MDQxODlhOGY2NjkwZWIxZDQzMDZhYjJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL1NRTGl0ZURhdGFiYXNlLmgKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIAogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgdGFibGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBjbGVhckFsbFRhYmxlcygpOwotICAgIGludCBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgaW50IHJ1blZhY3V1bUNvbW1hbmQoKTsKICAgICBpbnQgcnVuSW5jcmVtZW50
YWxWYWN1dW1Db21tYW5kKCk7CiAgICAgCiAgICAgYm9vbCB0cmFuc2FjdGlvbkluUHJvZ3Jlc3Mo
KSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzczsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCmluZGV4IGExOTNkOGMyNGIwYmQw
MjQ5NjViYjEwNTQ0NjQyM2JiYzhmNWJmZTkuLmYzNjZjNzMwMmY0YmE1YTVmNGFjMWE2MWMxNjI2
MzMxMzkzMmQzZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVTdGF0ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3Rh
dGVtZW50LmgKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBnZXRDb2x1bW5O
YW1lKGludCBjb2wpOwogICAgIFNRTFZhbHVlIGdldENvbHVtblZhbHVlKGludCBjb2wpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBnZXRDb2x1bW5UZXh0KGludCBjb2wpOwotICAgIGRvdWJs
ZSBnZXRDb2x1bW5Eb3VibGUoaW50IGNvbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgZG91YmxlIGdl
dENvbHVtbkRvdWJsZShpbnQgY29sKTsKICAgICBXRUJDT1JFX0VYUE9SVCBpbnQgZ2V0Q29sdW1u
SW50KGludCBjb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludDY0X3QgZ2V0Q29sdW1uSW50NjQo
aW50IGNvbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGdldENvbHVtbkJsb2JBc1N0cmlu
ZyhpbnQgY29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwM2RmYjc3NGI2MzBiNmVjZWM2NDVkYzMxYjcy
OWZmYmQxMzQ3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBA
IC0wLDAgKzEsMTUzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIgorCisjaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJOZXR3b3JrU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZWxlbWV0cnkuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRv
ci5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvU3RkU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisjZGVmaW5l
IFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQsIC4uLikgUkVMRUFTRV9MT0df
SUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6IiBmbXQsIHRoaXMsICMjX19WQV9B
UkdTX18pCisjZGVmaW5lIFJFTEVBU0VfTE9HX0VSUk9SX0lGX0FMTE9XRUQoc2Vzc2lvbklELCBm
bXQsIC4uLikgUkVMRUFTRV9MT0dfRVJST1JfSUYoc2Vzc2lvbklELmlzQWx3YXlzT25Mb2dnaW5n
QWxsb3dlZCgpLCBOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6IiBmbXQsIHRoaXMsICMjX19WQV9BUkdTX18pCisjZWxzZQorI2RlZmluZSBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pICAoKHZvaWQpMCkKKyNkZWZpbmUg
UkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZtdCwgLi4uKSAgKCh2b2lk
KTApCisjZW5kaWYKKworY29uc3RleHByIGF1dG8gb2JzZXJ2ZWREb21haW5Db3VudFF1ZXJ5ID0g
IlNFTEVDVCBDT1VOVCgqKSBGUk9NIE9ic2VydmVkRG9tYWlucyJfczsKK2NvbnN0ZXhwciBhdXRv
IGluc2VydE9ic2VydmVkRG9tYWluUXVlcnkgPSAiSU5TRVJUIElOVE8gT2JzZXJ2ZWREb21haW5z
IChyZWdpc3RyYWJsZURvbWFpbiwgbGFzdFNlZW4sIGhhZFVzZXJJbnRlcmFjdGlvbiwiCisgICAg
Im1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lLCBncmFuZGZhdGhlcmVkLCBpc1ByZXZhbGVu
dCwgaXNWZXJ5UHJldmFsZW50LCBkYXRhUmVjb3Jkc1JlbW92ZWQsIHRpbWVzQWNjZXNzZWRBc0Zp
cnN0UGFydHlEdWVUb1VzZXJJbnRlcmFjdGlvbiwiCisgICAgInRpbWVzQWNjZXNzZWRBc0ZpcnN0
UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpIFZBTFVFUyAoPywgPywgPywgPywgPywgPywgPywg
PywgPywgPykiX3M7Citjb25zdGV4cHIgYXV0byBpbnNlcnRUb3BMZXZlbERvbWFpblF1ZXJ5ID0g
IklOU0VSVCBJTlRPIFRvcExldmVsRG9tYWlucyBWQUxVRVMgKD8pIl9zOworY29uc3RleHByIGF1
dG8gZG9tYWluSURGcm9tU3RyaW5nUXVlcnkgPSAiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRv
IHN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBJTlRPIFN0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAoZG9tYWluSUQsIHRvcExldmVsRG9tYWlu
SUQpICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
byAoc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQpIFNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zOworY29uc3RleHBy
IGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElT
VFMgKFNFTEVDVCAxIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzb3VyY2VE
b21haW5JRCA9ID8gIgorICAgICJBTkQgdG9Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7Citjb25z
dGV4cHIgYXV0byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJTlNFUlQgSU5U
TyBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gKHRhcmdldERvbWFpbklELCBmcm9tRG9tYWlu
SUQpICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbUV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00g
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tIFdIRVJFIHRhcmdldERvbWFpbklEID0gPyAiCisg
ICAgIkFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8gc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBJTlRPIFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnMgKHN1YkZyYW1lRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluSUQpICIK
KyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lz
dHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZST00gU3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJGcmFtZURvbWFpbklEID0gPyAiCisgICAg
IkFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgSU5UTyBTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zIChzdWJyZXNvdXJjZURvbWFpbklELCB0b3BGcmFtZURv
bWFpbklEKSAiCisgICAgIlNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBX
SEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1Qg
MSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgIgorICAgICJXSEVSRSBzdWJy
ZXNvdXJjZURvbWFpbklEID0gPyBBTkQgdG9wRnJhbWVEb21haW5JRCA9IChTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7
Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkgPSAiSU5T
RVJUIElOVE8gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoc3VicmVzb3VyY2VEb21haW5J
RCwgdG9Eb21haW5JRCkgIgorICAgICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChT
RUxFQ1QgMSBGUk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc3VicmVzb3Vy
Y2VEb21haW5JRCA9ID8gIgorICAgICJBTkQgdG9Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQg
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7Citj
b25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSA9ICJJTlNF
UlQgSU5UTyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gKHN1YnJlc291cmNlRG9tYWlu
SUQsIGZyb21Eb21haW5JRCkgIgorICAgICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZl
ZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJfczsKK2NvbnN0ZXhwciBhdXRv
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElT
VFMgKFNFTEVDVCAxIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIFdIRVJFIHN1
YnJlc291cmNlRG9tYWluSUQgPSA/ICIKKyAgICAiQU5EIGZyb21Eb21haW5JRCA9IChTRUxFQ1Qg
ZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
KSkiX3M7Citjb25zdGV4cHIgYXV0byBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uUXVlcnkgPSAi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaGFkVXNlckludGVyYWN0aW9uID0gPywgbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPSA/ICIKKyAgICAiV0hFUkUgcmVnaXN0cmFibGVEb21h
aW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlTGFzdFNlZW5RdWVyeSA9ICJVUERBVEUg
T2JzZXJ2ZWREb21haW5zIFNFVCBsYXN0U2VlbiA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4g
PSA/Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9ID8gV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5
ID0gIlNFTEVDVCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3Ry
YWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVWZXJ5UHJldmFsZW50UmVz
b3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ZlcnlQcmV2YWxlbnQg
PSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGlzVmVy
eVByZXZhbGVudFJlc291cmNlUXVlcnkgPSAiU0VMRUNUIGlzVmVyeVByZXZhbGVudCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIg
YXV0byBjbGVhclByZXZhbGVudFJlc291cmNlUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgaXNQcmV2YWxlbnQgPSAwLCBpc1ZlcnlQcmV2YWxlbnQgPSAwIFdIRVJFIHJlZ2lzdHJh
YmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5
ID0gIlNFTEVDVCBoYWRVc2VySW50ZXJhY3Rpb24sIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25U
aW1lIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsK
K2NvbnN0ZXhwciBhdXRvIHVwZGF0ZUdyYW5kZmF0aGVyZWRRdWVyeSA9ICJVUERBVEUgT2JzZXJ2
ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3M7Citjb25zdGV4cHIgYXV0byBpc0dyYW5kZmF0aGVyZWRRdWVyeSA9ICJTRUxFQ1QgZ3Jh
bmRmYXRoZXJlZCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3M7Citjb25zdGV4cHIgYXV0byBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0g
IlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBoYWRVc2VySW50ZXJh
Y3Rpb24gPSAxIEFORCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSA8ID8iX3M7CisgICAg
CitSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwg
V29ya1F1ZXVlJiB3b3JrUXVldWUsIGNvbnN0IFN0cmluZyYgc3RvcmFnZURpcmVjdG9yeVBhdGgp
CisgICAgOiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSkKKyAg
ICAsIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgoc3RvcmFnZURpcmVjdG9yeVBhdGggKyAiL29ic2Vy
dmF0aW9ucy5kYiIpCisgICAgLCBtX29ic2VydmVkRG9tYWluQ291bnQobV9kYXRhYmFzZSwgb2Jz
ZXJ2ZWREb21haW5Db3VudFF1ZXJ5KQorICAgICwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRl
bWVudChtX2RhdGFiYXNlLCBpbnNlcnRPYnNlcnZlZERvbWFpblF1ZXJ5KQorICAgICwgbV9pbnNl
cnRUb3BMZXZlbERvbWFpblN0YXRlbWVudChtX2RhdGFiYXNlLCBpbnNlcnRUb3BMZXZlbERvbWFp
blF1ZXJ5KQorICAgICwgbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
ZG9tYWluSURGcm9tU3RyaW5nUXVlcnkpCisgICAgLCBtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBzdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFt
ZURvbWFpbnNRdWVyeSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbyhtX2RhdGFi
YXNlLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvUXVlcnkpCisgICAgLCBtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9FeGlzdHMobV9kYXRhYmFzZSwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0V4aXN0c1F1ZXJ5KQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20obV9kYXRh
YmFzZSwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkpCisgICAgLCBtX3RvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cyhtX2RhdGFiYXNlLCB0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c0Zyb21FeGlzdHNRdWVyeSkKKyAgICAsIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cyhtX2RhdGFiYXNlLCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkpCisgICAgLCBt
X3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cyhtX2RhdGFiYXNlLCBzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5FeGlzdHNRdWVyeSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWlucyhtX2RhdGFiYXNlLCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
UXVlcnkpCisgICAgLCBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cyhtX2Rh
dGFiYXNlLCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNRdWVyeSkKKyAgICAs
IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyhtX2RhdGFiYXNlLCBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvUXVlcnkpCisgICAgLCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9FeGlzdHMobV9kYXRhYmFzZSwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1F1
ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20obV9kYXRhYmFzZSwg
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkpCisgICAgLCBtX3N1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cyhtX2RhdGFiYXNlLCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb21FeGlzdHNRdWVyeSkKKyAgICAsIG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blN0YXRlbWVudChtX2RhdGFiYXNlLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uUXVlcnkpCisg
ICAgLCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50KG1fZGF0YWJhc2UsIHVwZGF0ZUxhc3RTZWVu
UXVlcnkpCisgICAgLCBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJh
c2UsIHVwZGF0ZVByZXZhbGVudFJlc291cmNlUXVlcnkpCisgICAgLCBtX2lzUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgaXNQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAg
ICwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXBk
YXRlVmVyeVByZXZhbGVudFJlc291cmNlUXVlcnkpCisgICAgLCBtX2lzVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsIGlzVmVyeVByZXZhbGVudFJlc291cmNlUXVlcnkp
CisgICAgLCBtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgY2xl
YXJQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAgICwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQobV9kYXRhYmFzZSwgaGFkVXNlckludGVyYWN0aW9uUXVlcnkpCisgICAgLCBtX3VwZGF0
ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXBkYXRlR3JhbmRmYXRoZXJlZFF1
ZXJ5KQorICAgICwgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgaXNHcmFu
ZGZhdGhlcmVkUXVlcnkpCisgICAgLCBtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVt
ZW50KG1fZGF0YWJhc2UsIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBy
ZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIHRoaXMtPndvcmtR
dWV1ZSgpLT5kaXNwYXRjaChbdGhpcywgcGF0aCA9IG1fc3RvcmFnZURpcmVjdG9yeVBhdGguaXNv
bGF0ZWRDb3B5KCldIHsKKyAgICAgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4ocGF0aCkpIHsKKyAg
ICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVuIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJs
aWN9cywgZGF0YWJhc2UgcGF0aDogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCksIHBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gU2luY2Ugd2UgYXJlIHVzaW5nIGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFsIGRp
c3BhdGNoIGJsb2NrcyBtYXkgYmUgY2FsbGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAgICAg
ICBtX2RhdGFiYXNlLmRpc2FibGVUaHJlYWRpbmdDaGVja3MoKTsKKworICAgICAgICBpZiAoIW1f
ZGF0YWJhc2UudGFibGVFeGlzdHMoIk9ic2VydmVkRG9tYWlucyIpKSB7CisgICAgICAgICAgICBp
ZiAoIWNyZWF0ZVNjaGVtYSgpKSB7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNyZWF0
ZVNjaGVtYSBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMsIGRhdGFiYXNlIHBhdGg6
ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBwYXRoLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghcHJlcGFyZVN0YXRlbWVudHMoKSkgeworICAgICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBh
cmVTdGF0ZW1lbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cywgZGF0YWJhc2Ug
cGF0aDogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCksIHBhdGgu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy0+d29ya1F1ZXVl
KCktPmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsK
KyAgICAgICAgaWYgKHdlYWtUaGlzKQorICAgICAgICAgICAgd2Vha1RoaXMtPmNhbGN1bGF0ZUFu
ZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgIH0pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIGlmICht
X29ic2VydmVkRG9tYWluQ291bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3Vs
dCA9IG1fb2JzZXJ2ZWREb21haW5Db3VudC5nZXRDb2x1bW5JbnQoMCkgPyBmYWxzZSA6IHRydWU7
CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9vYnNlcnZlZERvbWFpbkNvdW50LnJlc2V0
KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRF
X09LKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjb25zdGV4cHIgYXV0byBjcmVh
dGVPYnNlcnZlZERvbWFpbiA9ICJDUkVBVEUgVEFCTEUgT2JzZXJ2ZWREb21haW5zICgiCisgICAg
ImRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQgTk9U
IE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEwsICIK
KyAgICAiaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5URUdFUiBOT1Qg
TlVMTCwgIgorICAgICJpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2YWxl
bnQgSU5URUdFUiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5VTEws
IgorICAgICJ0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24gSU5U
RUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vz
c0FQSSBJTlRFR0VSIE5PVCBOVUxMKTsiX3M7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcExl
dmVsRG9tYWlucyA9ICJDUkVBVEUgVEFCTEUgVG9wTGV2ZWxEb21haW5zICgiCisgICAgInRvcExl
dmVsRG9tYWluSUQgSU5URUdFUiBQUklNQVJZIEtFWSwgQ09OU1RSQUlOVCBma0RvbWFpbklEIEZP
UkVJR04gS0VZKHRvcExldmVsRG9tYWluSUQpICIKKyAgICAiUkVGRVJFTkNFUyBPYnNlcnZlZERv
bWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiX3M7CisKK2NvbnN0ZXhwciBhdXRv
IGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVEFCTEUg
U3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zICgiCisgICAgImRvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIHRvcExldmVsRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElD
VCBGQUlMLCAiCisgICAgIkNPTlNUUkFJTlQgZmtEb21haW5JRCBGT1JFSUdOIEtFWShkb21haW5J
RCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURF
LCAiCisgICAgIkZPUkVJR04gS0VZKHRvcExldmVsRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2
ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiOworCitjb25z
dGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvID0gIkNSRUFURSBUQUJM
RSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvICgiCisgICAgInNvdXJjZURvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdO
IEtFWShzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxE
b21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9Eb21haW5J
RCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRF
IENBU0NBREUpOyI7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSA9ICJDUkVBVEUgVEFCTEUgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICgiCisg
ICAgInRhcmdldERvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VS
IE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHRhcmdldERvbWFpbklEKSBSRUZFUkVOQ0VT
IFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgor
ICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5z
KHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiOworCitjb25zdGV4cHIgYXV0
byBjcmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCisgICAgInN1YkZyYW1lRG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZP
UkVJR04gS0VZKHN1YkZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRv
bWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURv
bWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBE
RUxFVEUgQ0FTQ0FERSk7IjsKKworY29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWlucyA9ICJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWlucyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRv
cEZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzdWJy
ZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04g
REVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVG
RVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NB
REUpOyI7CisKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG8gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAi
c3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIg
Tk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJF
TkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAg
IkZPUkVJR04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFp
bklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7IjsKKworY29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb20gKCIKKyAgICAic3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShz
dWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkg
T04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZF
UkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyI7Cisg
ICAgCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hl
bWEoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZU9ic2VydmVkRG9tYWluKSkgeworICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgT2JzZXJ2ZWREb21haW5zIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcExldmVsRG9tYWlucykpIHsKKyAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFRvcExldmVsRG9tYWlucyB0YWJsZSBpbiBkYXRh
YmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RF
cnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9k
YXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURv
bWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9k
YXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1h
bmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbykpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgY3JlYXRlIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0
YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1f
ZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
KSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMp
KSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0
ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IGNyZWF0ZSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2Rh
dGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJv
bSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50cygpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgICAgIAorICAgIGlmIChtX29ic2VydmVkRG9t
YWluQ291bnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2Vy
dmVkRG9tYWluU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9p
bnNlcnRUb3BMZXZlbERvbWFpblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3RvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG8ucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRF
X09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4
aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faXNQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBk
YXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faGFkVXNlckludGVyYWN0aW9u
U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVHcmFu
ZGZhdGhlcmVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9p
c0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50
cyBmYWlsZWQgdG8gcHJlcGFyZSwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRPYnNlcnZlZERv
bWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBsb2FkU3RhdGlzdGljcykKK3sKKyNp
Zm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKGNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3QobG9hZFN0
YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4pKTsKKyNlbmRpZgorCisgICAgaWYgKG1faW5zZXJ0
T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgbG9hZFN0YXRpc3RpY3MucmVnaXN0
cmFibGVEb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9i
c2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmREb3VibGUoMiwgbG9hZFN0YXRpc3RpY3MubGFzdFNl
ZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDMsIGxvYWRTdGF0aXN0aWNz
LmhhZFVzZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2Jz
ZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBsb2FkU3RhdGlzdGljcy5tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRJ
bnQoNSwgbG9hZFN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZCkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg2LCBsb2FkU3RhdGlz
dGljcy5pc1ByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNl
cnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDcsIGxvYWRTdGF0aXN0aWNzLmlzVmVy
eVByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDgsIGxvYWRTdGF0aXN0aWNzLmRhdGFSZWNvcmRz
UmVtb3ZlZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5T
dGF0ZW1lbnQuYmluZEludCg5LCBsb2FkU3RhdGlzdGljcy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBh
cnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRJbnQoMTAsIGxvYWRTdGF0aXN0aWNzLnRpbWVz
QWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpICE9IFNRTElURV9PSykg
eworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRvIGJp
bmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJv
ck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2Vy
dmVkRG9tYWluIGZhaWxlZCB0byBjb21taXQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1
bHQgPSBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJU
X1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZWxhdGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQs
IHVuc2lnbmVkIGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmRE
b21haW4pIGNvbnN0Cit7CisgICAgaWYgKHN0YXRlbWVudC5iaW5kSW50KDEsIGZpcnN0RG9tYWlu
SUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwgc2Vjb25k
RG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAo
KSAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFpblJl
bGF0aW9uc2hpcFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJs
aWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBi
b29sIHJlc3VsdCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyB0cnVlIDogZmFsc2U7CisK
KyAgICBpbnQgcmVzZXRSZXN1bHQgPSBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHN0
YXRlbWVudCwgdW5zaWduZWQgZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BG
cmFtZSkKK3sKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRJbnQoMSwgZG9tYWluSUQpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwgdG9wRnJhbWUuc3RyaW5nKCkp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFpblJlbGF0aW9uc2hpcFN0YXRl
bWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCByZXNldFJlc3VsdCA9IHN0
YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVz
dWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZm5kZWYg
TkRFQlVHCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb25maXJt
RG9tYWluRG9lc05vdEV4aXN0KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0
Cit7CisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjb25m
aXJtRG9tYWluRG9lc05vdEV4aXN0IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1
YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgICAgICAK
KyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9S
T1cpIHsKKyAgICAgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0
ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRS
ZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJlc2V0KCk7
CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09L
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit1bnNpZ25lZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBkb21haW5JRCA9IDA7CisKKyAg
ICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0
cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9kb21haW5JREZyb21TdHJpbmdTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFp
bklERnJvbVN0cmluZyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBkb21haW5JRDsKKyAgICB9CisKKyAgICBkb21haW5JRCA9IG1fZG9t
YWluSURGcm9tU3RyaW5nU3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKworICAgIGludCByZXNl
dFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNT
RVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAK
KyAgICByZXR1cm4gZG9tYWluSUQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Omluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0YXRpc3RpY3MpCit7CisgICAgYXV0byByZWdpc3Ry
YWJsZURvbWFpbklEID0gZG9tYWluSUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVEb21haW4p
OworICAgIGZvciAoYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdG9yYWdl
QWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcChtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCwgcmVnaXN0
cmFibGVEb21haW5JRCwgdG9wRnJhbWVEb21haW4pOworCisgICAgZm9yIChhdXRvJiB0b0RvbWFp
biA6IGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pCisgICAgICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZ2lz
dHJhYmxlRG9tYWluSUQsIHRvRG9tYWluKTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIGZyb21Eb21h
aW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pCisgICAgICAg
IGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSwg
cmVnaXN0cmFibGVEb21haW5JRCwgZnJvbURvbWFpbik7CisgICAgCisgICAgZm9yIChhdXRvJiB0
b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnMpCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAK
KyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9hZFN0YXRpc3RpY3Muc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
KG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVEb21haW5JRCwg
dG9wRnJhbWVEb21haW4pOworICAgIAorICAgIGZvciAoYXV0byYgdG9Eb21haW4gOiBsb2FkU3Rh
dGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAgICAgICBpbnNlcnREb21h
aW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJs
ZURvbWFpbklELCB0b0RvbWFpbik7CisgICAgCisgICAgZm9yIChhdXRvJiBmcm9tRG9tYWluIDog
bG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKQorICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20s
IHJlZ2lzdHJhYmxlRG9tYWluSUQsIGZyb21Eb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZShjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmIG1lbW9yeVN0b3JlKQoreworICAgIHdv
cmtRdWV1ZSgpLT5kaXNwYXRjaChbdGhpcywgd2Vha01lbW9yeVN0b3JlID0gbWFrZVdlYWtQdHIo
bWVtb3J5U3RvcmUpXSB7CisgICAgICAgIGlmICghd2Vha01lbW9yeVN0b3JlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICghaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGF1dG8mIHN0YXRpc3RpY3NNYXAgPSB3ZWFrTWVtb3J5U3RvcmUtPmRhdGEo
KTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwKQor
ICAgICAgICAgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljLnZhbHVlKTsKKworICAg
ICAgICAvLyBNYWtlIGEgc2VwYXJhdGUgcGFzcyBmb3IgaW50ZXItZG9tYWluIHJlbGF0aW9uc2hp
cHMgc28gd2UKKyAgICAgICAgLy8gY2FuIHJlZmVyIHRvIHRoZSBPYnNlcnZlZERvbWFpbiB0YWJs
ZSBlbnRyaWVzCisgICAgICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcCkK
KyAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcHMoc3RhdGlzdGljLnZhbHVlKTsK
KworICAgICAgICBtX2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKKyAgICB9KTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2FsY3VsYXRlQW5kU3Vi
bWl0VGVsZW1ldHJ5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIC8vIEZJWE1FKDE5NTA4OCk6IEltcGxlbWVudCBmb3IgRGF0YWJhc2UgdmVyc2lvbi4K
K30KKworc3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAg
IGZvciAoYXV0byBkb21haW5OYW1lIDogZG9tYWlucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW5O
YW1lLnN0cmluZygpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJyInKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlu
cyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnMpCit7CisgICAgU1FMaXRlU3Rh
dGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92ZWQgPSBkYXRhUmVjb3Jk
c1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJp
bmcoZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJl
cGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQu
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdv
cmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRT
dGF0aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgfQorfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVk
VG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwgU3RkU2V0PHVuc2lnbmVkPiYg
bm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG51
bWJlck9mUmVjdXJzaXZlQ2FsbHMgPj0gbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJl
Y3RUcmFjZUJhY2spIHsKKyAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgIkhpdCAldSByZWN1cnNpdmUgY2FsbHMgaW4gcmVkaXJlY3QgYmFja3RyYWNlLiBSZXR1cm5p
bmcgZWFybHkuIiwgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2sp
OworICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKKyAgICB9CisgICAgCisg
ICAgKytudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisgICAgU3RkU2V0PHVuc2lnbmVkPiBuZXds
eUlkZW50aWZpZWREb21haW5zOworICAgIFNRTGl0ZVN0YXRlbWVudCBmaW5kU3VicmVzb3VyY2Vz
KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIElO
TkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgV0hFUkUgc3VicmVzb3Vy
Y2VEb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHByaW1hcnlEb21haW5JRCksICJBTkQgT2Jz
ZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCIpKTsKKyAgICBpZiAoZmluZFN1YnJlc291cmNl
cy5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChmaW5kU3VicmVzb3Vy
Y2VzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBhdXRvIG5ld0RvbWFpbiA9
IGZpbmRTdWJyZXNvdXJjZXMuZ2V0Q29sdW1uSW50KDApOworICAgICAgICAgICAgYXV0byBpbnNl
cnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMuaW5zZXJ0KG5ld0RvbWFp
bik7CisgICAgICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgICAg
ICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW4pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BGcmFtZXMobV9kYXRhYmFzZSwgbWFr
ZVN0cmluZygiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQg
ZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFp
bnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVy
KHByaW1hcnlEb21haW5JRCksICJBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCIp
KTsKKyAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAg
ICAgICBhdXRvIG5ld0RvbWFpbiA9IGZpbmRUb3BGcmFtZXMuZ2V0Q29sdW1uSW50KDApOworICAg
ICAgICAgICAgYXV0byBpbnNlcnRSZXN1bHQgPSBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJj
ZXMuaW5zZXJ0KG5ld0RvbWFpbik7CisgICAgICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29u
ZCkKKyAgICAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21h
aW4pOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG5ld2x5SWRlbnRpZmllZERvbWFpbnMu
ZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisKKyAgICBm
b3IgKGF1dG8gZG9tYWluSUQgOiBuZXdseUlkZW50aWZpZWREb21haW5zKQorICAgICAgICBudW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzID0gcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1Ro
YXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGRvbWFpbklELCBub25QcmV2YWxlbnRSZWRpcmVjdGlv
blNvdXJjZXMsIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOworCisgICAgcmV0dXJuIG51bWJlck9m
UmVjdXJzaXZlQ2FsbHM7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJdGVyYXRvclR5cGU+Citz
dGF0aWMgU3RyaW5nIGJ1aWxkTGlzdChjb25zdCBXVEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3JU
eXBlPiYgdmFsdWVzKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1
dG8gZG9tYWluSUQgOiB2YWx1ZXMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmROdW1iZXIoZG9tYWluSUQpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0
cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
YXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+IHByZXZhbGVudER1
ZVRvUmVkaXJlY3Q7CisgICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlUmVkaXJlY3RTdGF0
ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNUSU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvLnN1YnJlc291cmNlRG9tYWluSUQgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5z
LmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1l
bnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VS
ZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZh
bGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVSZWRp
cmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
IEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJl
dmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFy
ZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRl
bWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVk
aXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsK
KyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgbWFya1ByZXZhbGVudFN0YXRlbWVudChtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVu
dCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8
U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHByZXZhbGVudER1ZVRvUmVkaXJlY3QuYmVnaW4o
KSwgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQoKSkpLCAiKSIpKTsKKyAgICBpZiAobWFya1By
ZXZhbGVudFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1hcmtQ
cmV2YWxlbnRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQg
dG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2Uu
bGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK0hhc2hNYXA8dW5zaWduZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKQoreworICAgIEhhc2hNYXA8
dW5zaWduZWQsIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IHJlc3VsdHM7CisKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQgRlJPTSBP
YnNlcnZlZERvbWFpbnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYgKG5v
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykg
eworICAgICAgICB3aGlsZSAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5zdGVw
KCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1u
SW50KDApKTsKKyAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFsdWUoeyBS
ZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3Ry
aW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKSkK
KyAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9h
ZFByZXZhbGVuY2U6OkxvdworICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKKyAgICAg
ICAgICAgIHJlc3VsdHMuYWRkKGtleSwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byB2YWx1ZSA6IHJlc3VsdHMua2V5
cygpKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVyKHZh
bHVlKTsKKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZGVyLnRv
U3RyaW5nKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3Vy
Y2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklE
c09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYg
KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNR
TElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
c1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQg
ZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1
bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBy
ZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJl
c291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNPZklu
dGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElU
RV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50
U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0g
cmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1YnJl
c291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21h
aW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAg
IGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgp
ID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluc0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihz
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNU
IHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3Qs
ICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAg
ICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9
PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0
Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRv
bWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBy
ZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpy
ZWNsYXNzaWZ5UmVzb3VyY2VzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJldmFs
ZW50UmVzb3VyY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbm90
VmVyeVByZXZhbGVudFJlc291cmNlcy52YWx1ZXMoKSkgeworICAgICAgICBhdXRvIG5ld1ByZXZh
bGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNl
U3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VT
dGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRp
c3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlzdGlj
LnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMucHJldmFs
ZW5jZSk7CisgICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3RhdGlzdGljLnBy
ZXZhbGVuY2UpCisgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRp
c3RpYy5yZWdpc3RlcmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOworICAgIH0KK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRS
ZXNvdXJjZXMoKQoreworICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgp
OworICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAg
cmVjbGFzc2lmeVJlc291cmNlcygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzeW5jU3RvcmFnZUlmTmVlZGVkKCkKK3sKKyAgICBtX2RhdGFiYXNlLnJ1
blZhY3V1bUNvbW1hbmQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpCit7CisgICAgbV9kYXRhYmFzZS5ydW5W
YWN1dW1Db21tYW5kKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9t
YWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPEZyYW1l
SUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJG
cmFtZURvbWFpbik7CisKKyAgICBzd2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJG
cmFtZURvbWFpbikpIHsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQ
dXJnZToKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcDoKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tp
ZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c6CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAg
YnJlYWs7CisgICAgfTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVk
Q29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBm
cmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxsSGFzU3RvcmFnZUFjY2Vzc0Zv
ckZyYW1lSGFuZGxlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQudmFs
dWUoKSwgcGFnZUlELCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1
YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlEIGZy
YW1lSUQsIFBhZ2VJRCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURv
bWFpbik7CisKKyAgICBzd2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJGcmFtZURv
bWFpbikpIHsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTog
eworICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRv
ICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkg
Y29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJz
dC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFj
Y2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRt
ZW50UmVzdWx0OjpCbG9ja0FuZEtlZXA6IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIk5vIG5l
ZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2ll
cyBhcmUgbm90IGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJhbWVEb21h
aW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0
b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxvdzoKKyAgICAgICAgLy8gRG8g
bm90aGluZworICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgYXV0byB1c2VyV2FzUHJvbXB0
ZWRFYXJsaWVyID0gcHJvbXB0RW5hYmxlZCAmJiBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NU
aHJvdWdoUHJvbXB0KHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAg
IGlmIChwcm9tcHRFbmFibGVkICYmICF1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQg
dG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31zIG9y
IG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURv
bWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
U3RvcmFnZUFjY2Vzc1N0YXR1czo6UmVxdWlyZXNVc2VyUHJvbXB0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKQorICAgICAgICBSRUxF
QVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnLCAiU3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJXtwdWJsaWN9cyB1bmRl
ciAle3B1YmxpY31zLiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRv
cEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgU1FMaXRlU3RhdGVt
ZW50IGluY3JlbWVudFN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRF
IE9ic2VydmVkRG9tYWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFn
ZUFjY2Vzc0FQSSA9IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NB
UEkgKyAxIFdIRVJFIGRvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIoc3ViRnJhbWVTdGF0dXMu
c2Vjb25kKSkpOworICAgIGlmIChpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisg
ICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdU
Rk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVh
cmxpZXIsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAo
Ym9vbCB3YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIod2FzR3JhbnRlZEFjY2VzcyA/IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0
b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOworICAgIH0pOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcywgT3BlbmVyUGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWlu
JiYgb3BlbmVyRG9tYWluKQoreworICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MgIT0gb3BlbmVyRG9tYWluKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIGlmIChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPT0gb3BlbmVyRG9tYWluKQorICAg
ICAgICByZXR1cm47CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpOworCisgICAgaWYgKGNvb2tpZVRy
ZWF0bWVudEZvck9yaWdpbihkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpICE9IENvb2tpZVRy
ZWF0bWVudFJlc3VsdDo6QWxsb3cpCisgICAgICAgIHJldHVybjsKKworICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJbVGVtcG9yYXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3Jh
bnRlZCBmb3IgJXtwdWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdp
dGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRP
ZlN0b3JhZ2VBY2Nlc3Muc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1v
dmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJEb21haW4pLCBX
VEY6Om51bGxvcHQsIG9wZW5lclBhZ2VJRCwgZmFsc2UsIFtdKGJvb2wpIHsgfSk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vz
cyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZy
YW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldh
c1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHVz
ZXJXYXNQcm9tcHRlZE5vdykgeworICAgICAgICBhdXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOwor
ICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0gQWRkZWRSZWNvcmQ6Ok5vKTsK
KyAgICAgICAgQVNTRVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbikpOwor
ICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BG
cmFtZURvbWFpbnNTdGF0ZW1lbnQsIHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21h
aW4pOworICAgIH0KKworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3Vi
RnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1
c2VyV2FzUHJvbXB0ZWROb3csIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNz
SW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4m
JiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisKKyAgICBpZiAoc3ViRnJhbWVEb21haW4gPT0gdG9wRnJhbWVEb21haW4pIHsKKyAgICAgICAg
Y2FsbGJhY2sodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
UmVtb3ZlIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBp
cyBubyBsb25nZXIgZXhwZXJpbWVudGFsLgorICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVh
cmxpZXIgJiYgc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCkpIHsKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJG
cmFtZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOworICAgICAgICBBU1NFUlQoaGFz
SGFkVXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluKSk7CisgICAgICAgIEFTU0VSVChoYXNV
c2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHN1YkZyYW1lU3RhdHVzLnNlY29u
ZCwgdG9wRnJhbWVEb21haW4pKTsKKyNlbmRpZgorICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24o
c3ViRnJhbWVEb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CisgICAgfQorCisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlz
b2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBmcmFtZUlELCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxHcmFu
dFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJh
bWVJRCwgcGFnZUlELCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc3RvcmUgPSBzdG9y
ZS5jb3B5UmVmKCldKGJvb2wgdmFsdWUpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB2
YWx1ZV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworCit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29u
c3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisgICAgU1FMaXRlU3Rh
dGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJV
UERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMSBXSEVSRSByZWdpc3Ry
YWJsZURvbWFpbiBJTiAoIiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLCAiKSIpKTsKKyAgICBp
ZiAoZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewor
ICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyBmYWlsZWQsIGVy
cm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1
cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKQoreworICAgIGlmICghZGVidWdNb2Rl
RW5hYmxlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxl
RG9tYWluPiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2Nr
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwor
ICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSwg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2Nr
LnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOworCisgICAg
aWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFs
UHJldmFsZW50UmVzb3VyY2UoKSk7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVn
TWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7
CisgICAgICAgIHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJl
c291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZGVidWdNYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAg
IHJldHVybiBwcmltYXJ5RG9tYWluc1RvQmxvY2s7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVE
b21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRp
cmVjdCwgYm9vbCBpc01haW5GcmFtZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGJvb2wgYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgPSB0YXJn
ZXREb21haW4gPT0gdG9wRnJhbWVEb21haW47CisgICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VE
b21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4gPT0gc291cmNlRG9tYWluOworCisgICAgYm9v
bCBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzTWFpbkZyYW1lICYm
ICEoYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291
cmNlRG9tYWluc1NhbWVTaXRlKSkgeworICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7Cisg
ICAgICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
czo6cmVkdWNlVGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKSk7CisKKyAgICAgICAgaWYg
KCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMs
IHRhcmdldFJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSkgeworICAgICAgICAgICAgaW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgdGFy
Z2V0UmVzdWx0LnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgICAgICAgICAgc3RhdGlzdGlj
c1dlcmVVcGRhdGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpc1JlZGly
ZWN0ICYmICFhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUpIHsKKyAgICAgICAgaWYg
KGlzTWFpbkZyYW1lKSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0
ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9t
YWluKTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUb0V4aXN0cywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJn
ZXREb21haW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1f
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25k
LCB0YXJnZXREb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9
IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWlu
KTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNGcm9tRXhpc3RzLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pKSB7
CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pOworICAg
ICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNl
RG9tYWluKTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25k
LCB0YXJnZXREb21haW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbywgcmVkaXJlY3RpbmdEb21haW5SZXN1
bHQuc2Vjb25kLCB0YXJnZXREb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJl
VXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0
UmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFy
Z2V0RG9tYWluKTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3Vy
Y2VEb21haW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1f
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3Vy
Y2VEb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGlzdGljc1dl
cmVVcGRhdGVkKQorICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElm
TmVjZXNzYXJ5KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxh
c3RTZWVuKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBy
ZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJn
ZXREb21haW4pOworICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgbGFzdFNlZW4pOwor
CisgICAgYXV0byB0YXJnZXREb21haW5JRCA9IHJlc3VsdC5zZWNvbmQ7CisgICAgaWYgKCFyZWxh
dGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIHRh
cmdldERvbWFpbklELCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgdGFyZ2V0RG9tYWlu
SUQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZk5lY2Vzc2FyeSgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVj
dGVkRnJvbURvbWFpbiYgc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHRh
cmdldERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1
dG8gc291cmNlRG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oc291cmNlRG9tYWluKTsKKyAgICBhdXRvIHRhcmdldERvbWFpblJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFp
bik7CisKKyAgICBib29sIGlzTmV3UmVkaXJlY3RUb0VudHJ5ID0gZmFsc2U7CisgICAgaWYgKCFy
ZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLCBz
b3VyY2VEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pKSB7CisgICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHNvdXJj
ZURvbWFpblJlc3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbik7CisgICAgICAgIGlzTmV3UmVkaXJl
Y3RUb0VudHJ5ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzTmV3UmVkaXJlY3RGcm9tRW50
cnkgPSBmYWxzZTsKKyAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbUV4aXN0cywgdGFyZ2V0RG9tYWluUmVzdWx0LnNlY29uZCwgc291cmNl
RG9tYWluKSkgeworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHRhcmdldERvbWFpblJlc3VsdC5zZWNvbmQsIHNvdXJjZURv
bWFpbik7CisgICAgICAgIGlzTmV3UmVkaXJlY3RGcm9tRW50cnkgPSB0cnVlOworICAgIH0KKwor
ICAgIGlmIChpc05ld1JlZGlyZWN0VG9FbnRyeSB8fCBpc05ld1JlZGlyZWN0RnJvbUVudHJ5KQor
ICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJ
bnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIGhhZFVzZXJJ
bnRlcmFjdGlvbiwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVyYWN0aW9uKQoreworICAgIGlmICht
X21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZEludCgxLCBoYWRVc2VySW50
ZXJhY3Rpb24pCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVu
dC5iaW5kRG91YmxlKDIsIG1vc3RSZWNlbnRJbnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgp
LnZhbHVlKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQuYmluZFRleHQoMywgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VXNlckludGVyYWN0aW9u
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9u
U3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRS
ZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiBkb21h
aW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIHNldFVzZXJJ
bnRlcmFjdGlvbihkb21haW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0VXNlckludGVyYWN0aW9u
KGRvbWFpbiwgZmFsc2UsIHsgfSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlU3RvcmFn
ZUFjY2VzcyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcih0
YXJnZXRSZXN1bHQuc2Vjb25kKSkpOworICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlv
biBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hh
ZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1faGFkVXNlckludGVyYWN0
aW9uU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9
IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmdldENvbHVtbkludCgwKSA/IHRydWUgOiBm
YWxzZTsKKyAgICBpZiAoIWhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gV2Fs
bFRpbWU6OmZyb21SYXdTZWNvbmRzKG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmdldENv
bHVtbkRvdWJsZSgxKSk7CisKKyAgICBpZiAoaGFzU3RhdGlzdGljc0V4cGlyZWQobW9zdFJlY2Vu
dFVzZXJJbnRlcmFjdGlvblRpbWUpKSB7CisgICAgICAgIC8vIERyb3AgcHJpdmFjeSBzZW5zaXRp
dmUgZGF0YSBiZWNhdXNlIHdlIG5vIGxvbmdlciBuZWVkIGl0LgorICAgICAgICAvLyBTZXQgdGlt
ZXN0YW1wIHRvIDAgc28gdGhhdCBzdGF0aXN0aWNzIG1lcmdlIHdpbGwga25vdworICAgICAgICAv
LyBpdCBoYXMgYmVlbiByZXNldCBhcyBvcHBvc2VkIHRvIGl0cyBkZWZhdWx0IC0xLgorICAgICAg
ICBjbGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4pOworICAgICAgICBoYWRVc2VySW50ZXJhY3Rp
b24gPSBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGhhZFVzZXJJbnRlcmFjdGlvbjsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZSBuZXdQcmV2YWxlbmNlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgaWYgKG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZElu
dCgxLCAxKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV91cGRh
dGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQo
cmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAgICBpZiAobmV3UHJl
dmFsZW5jZSA9PSBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCkgeworICAgICAgICBp
ZiAobV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZEludCgxLCAxKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNl
U3RhdGVtZW50LmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICB8fCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX3VwZGF0ZVZlcnlQ
cmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaW50IHJlc2V0UmVzdWx0ID0gbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQucmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1
bHQgPT0gU1FMSVRFX09LKTsKKyAgICB9CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+IG5vblByZXZh
bGVudFJlZGlyZWN0aW9uU291cmNlczsKKyAgICByZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnRE
b21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4oZG9tYWluSUQoZG9tYWluKSwgbm9uUHJl
dmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCAwKTsKKyAgICBzZXREb21haW5zQXNQcmV2YWxlbnQo
V1RGTW92ZShub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMpKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0RG9tYWluc0FzUHJldmFsZW50KFN0
ZFNldDx1bnNpZ25lZD4mJiBkb21haW5zKQoreworICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5z
VG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVk
RG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExp
c3QoV1RGOjpJdGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5z
LmJlZ2luKCksIGRvbWFpbnMuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0
ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1Vw
ZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldERvbWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1N0cmluZyBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklY
TUUoMTk1MDg4KTogSW1wbGVtZW50IFNRTGl0ZS1iYXNlZCBkdW1waW5nIHJvdXRpbmVzLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgwKTsKKyAgICByZXR1cm4geyB9OworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHByZWRpY2F0ZVN0YXRlbWVudCwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAKKyAgICBpZiAocHJlZGljYXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFp
bi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHByZWRpY2F0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZh
bHVlRm9yRG9tYWluIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCByZXN1bHQg
PSBwcmVkaWNhdGVTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gdHJ1ZSA6IGZhbHNlOworICAg
IGludCByZXNldFJlc3VsdCA9IHByZWRpY2F0ZVN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VS
VF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBj
b25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHBy
ZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgZG9t
YWluKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29u
c3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBwcmVk
aWNhdGVWYWx1ZUZvckRvbWFpbihtX2lzVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCBk
b21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpp
c1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1
YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcmVs
YXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzLCBk
b21haW5JRChzdWJyZXNvdXJjZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKK30KKworYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJh
bWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbkV4aXN0cywgZG9tYWluSUQoc3ViRnJhbWVEb21haW4pLCB0b3BGcmFt
ZURvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYg
cmVkaXJlY3RlZEZyb21Eb21haW4sIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgcmVkaXJlY3Rl
ZFRvRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9FeGlzdHMsIGRvbWFpbklEKHJlZGlyZWN0ZWRGcm9tRG9tYWluKSwgcmVkaXJlY3RlZFRvRG9t
YWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xl
YXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICAKKyAgICBpZiAobV9jbGVh
clByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJl
dmFsZW50UmVzb3VyY2UsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFi
YXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9jbGVhclBy
ZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNl
dFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZG9tYWluLCBib29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oZG9tYWluKTsKKyAgICAKKyAgICBpZiAobV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVt
ZW50LmJpbmRJbnQoMSwgdmFsdWUpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZUdy
YW5kZmF0aGVyZWRTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCBm
YWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJh
c2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZUdy
YW5kZmF0aGVyZWRTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVz
dWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworfQorCitib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihtX2lzR3JhbmRmYXRoZXJlZFN0
YXRlbWVudCwgZG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9t
YWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWlu
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURv
bWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUg
YSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRvbWFpbi4KKyAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisK
KyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zLCByZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOworCisgICAgLy8gRm9yIGNvbnNp
c3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhl
IHRvcCBmcmFtZSBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25z
aGlwKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgcmVzdWx0LnNlY29uZCwgdG9w
RnJhbWVEb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21h
aW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJlc291
cmNlRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28g
aGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4p
OworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbywgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOworCisgICAgLy8gRm9yIGNv
bnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3Ig
dGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlv
bnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJlc3VsdC5zZWNvbmQsIHJl
ZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7
CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0
aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKKworICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlc3Vs
dC5zZWNvbmQsIHJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9w
RnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJl
Y3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRv
cEZyYW1lRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFs
c28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAg
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21h
aW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tLCByZXN1bHQuc2Vjb25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3N0ZDo6cGFp
cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6QWRkZWRSZWNvcmQsIHVuc2ln
bmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZW5zdXJlUmVzb3VyY2VT
dGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRv
bWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX2Rv
bWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9
IFNRTElURV9PSykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y3JlYXRlU2NoZW1hIGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgQWRk
ZWRSZWNvcmQ6Ok5vLCAwIH07CisgICAgfQorICAgIAorICAgIGlmIChtX2RvbWFpbklERnJvbVN0
cmluZ1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICB1bnNpZ25lZCBk
b21haW5JRCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LmdldENvbHVtbkludCgwKTsK
KworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVu
dC5yZXNldCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3Vs
dCA9PSBTUUxJVEVfT0spOworICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8sIGRvbWFp
bklEIH07CisgICAgfQorCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJp
bmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNl
dFJlc3VsdCA9PSBTUUxJVEVfT0spOworCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBuZXdP
YnNlcnZhdGlvbihkb21haW4pOworICAgIGluc2VydE9ic2VydmVkRG9tYWluKG5ld09ic2VydmF0
aW9uKTsKKworICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpZZXMsIGRvbWFpbklEKGRvbWFpbikg
fTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXIo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgb3BlcmF0aW5nRGF0ZXMoKS5jbGVhcigp
OworCisgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisKKyAgICByZW1vdmVBbGxTdG9yYWdl
QWNjZXNzKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigp
XSB7IH0pOworCisgICAgYXV0byBwcmltYXJ5RG9tYWluc1RvQmxvY2sgPSBlbnN1cmVQcmV2YWxl
bnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICB1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRv
bWFpbnMocHJpbWFyeURvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJh
Y2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkNvb2tpZVRyZWF0bWVudFJlc3VsdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llVHJlYXRtZW50Rm9yT3JpZ2luKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhhZFVzZXJJbnRl
cmFjdGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ICIs
IGRvbWFpbi5zdHJpbmcoKSkpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAg
ICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNQcmV2YWxlbnQgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApID8gdHJ1ZSA6IGZh
bHNlOworICAgIGlmICghaXNQcmV2YWxlbnQpCisgICAgICAgIHJldHVybiBDb29raWVUcmVhdG1l
bnRSZXN1bHQ6OkFsbG93OworCisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBzdGF0ZW1l
bnQuZ2V0Q29sdW1uSW50KDEpID8gdHJ1ZSA6IGZhbHNlOworICAgIHJldHVybiBoYWRVc2VySW50
ZXJhY3Rpb24gPyBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcCA6IENvb2tpZVRy
ZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTsKK30KKyAgICAKK2Jvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQodW5zaWduZWQgcmVxdWVzdGluZ0RvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgZmlyc3RQYXJ0eURvbWFpbikgY29uc3QKK3sKKyAgICBhdXRvIGZpcnN0UGFydHlQcmlt
YXJ5RG9tYWluSUQgPSBkb21haW5JRChmaXJzdFBhcnR5RG9tYWluKTsKKworICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIENPVU5UKCop
IEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIGRvbWFpbklEID0g
IiwgU3RyaW5nOjpudW1iZXIocmVxdWVzdGluZ0RvbWFpbklEKSwgIiBBTkQgdG9wTGV2ZWxEb21h
aW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKGZpcnN0UGFydHlQcmltYXJ5RG9tYWluSUQpKSk7Cisg
ICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkgPyBmYWxzZSA6IHRydWU7Cit9CisKK1Zl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmRvbWFpbnNUb0Jsb2NrKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVzdWx0czsKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21h
aW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBp
ZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybiByZXN1
bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVG
cm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMCkpKTsK
KworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBhdXRvIGRvbWFpbnNUb0Jsb2NrID0gdGhpcy0+ZG9tYWluc1RvQmxvY2soKTsK
KworICAgIGlmIChkb21haW5zVG9CbG9jay5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZWJ1Z0xvZ2dp
bmdFbmFibGVkKCkgJiYgIWRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkKKyAgICAgICAgZGVidWdM
b2dEb21haW5zSW5CYXRjaGVzKCJibG9jayIsIGRvbWFpbnNUb0Jsb2NrKTsKKworICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0b3Jl
ID0gbWFrZVJlZihzdG9yZSgpKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9t
YWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21h
aW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBbd2Vha1RoaXMgPSBX
VEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAg
ICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gV1RGTW92ZSh3
ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+ZGVidWdMb2dnaW5n
RW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNv
b2tpZSBibG9ja2luZy4iKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpQcmV2YWxl
bnREb21haW5EYXRhPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJldmFs
ZW50RG9tYWlucygpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgCisgICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRhdGE+IHJlc3VsdHM7CisgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3Ry
YWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFj
dGlvbiwgZ3JhbmRmYXRoZXJlZCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVu
dCA9IDEiX3MpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkg
PT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKQorICAgICAgICAgICAgLCBSZWdpc3Ry
YWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0
YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJh
d1NlY29uZHMoc3RhdGVtZW50LmdldENvbHVtbkRvdWJsZSgyKSkKKyAgICAgICAgICAgICwgc3Rh
dGVtZW50LmdldENvbHVtbkludCgzKSA/IHRydWUgOiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0
ZW1lbnQuZ2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6IGZhbHNlCisgICAgICAgIH0pOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0czsKK30KKworVmVjdG9yPHVuc2lnbmVkPiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25z
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFZlY3Rv
cjx1bnNpZ25lZD4gcmVzdWx0czsKKyAgICBPcHRpb25hbDxTZWNvbmRzPiBleHBpcmF0aW9uRGF0
ZVRpbWUgPSBzdGF0aXN0aWNzRXBpcmF0aW9uVGltZSgpOworICAgIGlmICghZXhwaXJhdGlvbkRh
dGVUaW1lKQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgIGlmIChtX2ZpbmRFeHBpcmVk
VXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmREb3VibGUoMSwgZXhwaXJhdGlvbkRhdGVUaW1l
LnZhbHVlKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0czsK
KworICAgIHdoaWxlIChtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1bHRzLmFwcGVuZChtX2ZpbmRFeHBpcmVkVXNl
ckludGVyYWN0aW9uU3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisKKyAgICBpbnQgcmVzZXRS
ZXN1bHQgPSBtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
KworICAgIHJldHVybiByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZXhwaXJlZFJlY29yZHMgPSBmaW5k
RXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICBpZiAoZXhwaXJlZFJlY29yZHMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGV4cGlyZWRSZWNvcmRJRHMgPSBidWls
ZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9yPihleHBp
cmVkUmVjb3Jkcy5iZWdpbigpLCBleHBpcmVkUmVjb3Jkcy5lbmQoKSkpOworCisgICAgU1FMaXRl
U3RhdGVtZW50IGNsZWFyRXhwaXJlZEludGVyYWN0aW9uKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
IlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
ID0gMCwgaGFkVXNlckludGVyYWN0aW9uID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgZXhwaXJl
ZFJlY29yZElEcywgIikiKSk7CisgICAgaWYgKGNsZWFyRXhwaXJlZEludGVyYWN0aW9uLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVu
dCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkRFTEVURSBGUk9N
IFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyAiLCBleHBpcmVkUmVjb3JkSURzLCAi
KSIpKTsKKyAgICBpZiAocmVtb3ZlU3RvcmFnZUFjY2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24uc3Rl
cCgpICE9IFNRTElURV9ET05FCisgICAgICAgIHx8IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIl
cCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rp
b24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVh
ckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4mJiBkb21haW5JRHNUb0NsZWFyKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbklEc1RvQ2xl
YXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGxpc3RUb0NsZWFyID0g
YnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxWZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4o
ZG9tYWluSURzVG9DbGVhci5iZWdpbigpLCBkb21haW5JRHNUb0NsZWFyLmVuZCgpKSk7CisKKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudChtX2RhdGFiYXNl
LCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0g
MCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvQ2xlYXIsICIpIikpOworICAgIGlmIChjbGVh
ckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAoY2xlYXJHcmFuZGZhdGhlcmluZ1N0YXRlbWVudC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRo
ZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCitWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRh
Rm9yKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGJvb2wgc2hv
dWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAo
KSA+IFdhbGxUaW1lOjpub3coKTsKKyAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcg
PSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wKCk7CisKKyAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKKyAgICAgICAg
Y2xlYXJFbmRPZkdyYW5kZmF0aGVyaW5nVGltZVN0YW1wKCk7CisKKyAgICBjbGVhckV4cGlyZWRV
c2VySW50ZXJhY3Rpb25zKCk7CisgICAgCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBw
cmV2YWxlbnRSZXNvdXJjZXM7CisKKyAgICBWZWN0b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcHJl
dmFsZW50RG9tYWlucyA9IHRoaXMtPnByZXZhbGVudERvbWFpbnMoKTsKKyAgICBWZWN0b3I8dW5z
aWduZWQ+IGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZzsKKyAgICBmb3IgKGF1dG8mIHN0
YXRpc3RpYyA6IHByZXZhbGVudERvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFzdGF0aXN0aWMuaGFk
VXNlckludGVyYWN0aW9uICYmICghc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyB8fCAhc3Rh
dGlzdGljLmdyYW5kZmF0aGVyZWQpKQorICAgICAgICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFw
cGVuZChzdGF0aXN0aWMucmVnaXN0ZXJhYmxlRG9tYWluKTsKKworICAgICAgICBpZiAoc2hvdWxk
Q2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkKKyAgICAgICAg
ICAgIGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhlcmluZy5hcHBlbmQoc3RhdGlzdGljLmRvbWFp
bklEKTsKKyAgICB9CisKKyAgICBjbGVhckdyYW5kZmF0aGVyaW5nKFdURk1vdmUoZG9tYWluSURz
VG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7CisgICAgCisgICAgcmV0dXJuIHByZXZhbGVudFJlc291
cmNlczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1
bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgdW5zaWduZWQgY291bnQgPSAwOworICAgIGlmIChtX29ic2VydmVkRG9tYWluQ291
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIGNvdW50ID0gbV9vYnNlcnZlZERvbWFp
bkNvdW50LmdldENvbHVtbkludCgwKTsKKworICAgIGludCByZXNldFJlc3VsdCA9IG1fb2JzZXJ2
ZWREb21haW5Db3VudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJl
c2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAgICBpZiAoY291bnQgPD0gcGFyYW1ldGVycygp
Lm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFy
YW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGlj
c0VudHJpZXMpOworCisgICAgc2l6ZV90IGNvdW50TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFt
ZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87CisgICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUp
OworCisgICAgU1FMaXRlU3RhdGVtZW50IHJlY29yZHNUb1BydW5lKG1fZGF0YWJhc2UsIG1ha2VT
dHJpbmcoIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRV
c2VySW50ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBsYXN0U2VlbiBERVNDIExJTUlUICIsIFN0cmlu
Zzo6bnVtYmVyKGNvdW50TGVmdFRvUHJ1bmUpKSk7CisgICAgaWYgKHJlY29yZHNUb1BydW5lLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlz
dGljc0lmTmVlZGVkIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZW50cmllc1Rv
UHJ1bmU7CisgICAgd2hpbGUgKHJlY29yZHNUb1BydW5lLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQocmVjb3Jkc1RvUHJ1bmUuZ2V0Q29sdW1uSW50
KDApKTsKKworICAgIGF1dG8gbGlzdFRvUHJ1bmUgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJh
bmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9yPihlbnRyaWVzVG9QcnVuZS5iZWdpbigpLCBl
bnRyaWVzVG9QcnVuZS5lbmQoKSkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHBydW5lQ29tbWFu
ZChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJERUxFVEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hF
UkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5lLCAiKSIpKTsKKyAgICBpZiAocHJ1bmVDb21t
YW5kLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcHJ1bmVDb21tYW5kLnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAi
JXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
LCBXYWxsVGltZSBsYXN0U2VlbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmIChtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LmJpbmREb3VibGUoMSwgbGFzdFNl
ZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwg
bV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LnN0ZXAoKSAh
PSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAg
LSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlTGFzdFNlZW4gZmFp
bGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV91cGRhdGVMYXN0
U2VlblN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJl
c2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21h
aW4sIFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFp
bik7CisgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWluLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMo
c2Vjb25kcy5zZWNvbmRzKCkpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgIHNldFByZXZhbGVudFJlc291cmNl
KGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMGJjMzJlNTdkNDQ4OGFiM2Qz
NzU4NzRmNTUwY2VjYjlhNjQwZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2luY2x1ZGUgIlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxl
ci5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNRTGl0ZURhdGFiYXNlOworY2xhc3MgU1FMaXRl
U3RhdGVtZW50Oworc3RydWN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CisK
Ky8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KK2NsYXNz
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIGZpbmFsIDogcHVibGljIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7CitwdWJsaWM6CisgICAgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1
ZXVlJiwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5UGF0aCk7CisKKyAgICB2b2lkIHBv
cHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZSYpOworCisgICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92
ZXJyaWRlOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCB1
cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpIG92ZXJyaWRlOworICAg
IHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3Jh
Z2VJbW1lZGlhdGVseSgpIG92ZXJyaWRlOworCisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vz
c1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQs
IE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9y
RG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYpIG92ZXJyaWRlOworCisg
ICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VE
b21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFz
UmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0
ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBjbGVhclByZXZhbGVudFJl
c291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGR1
bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1By
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBz
ZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSkgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJS
ZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRp
cmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1l
RG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2Fs
Y3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGhh
c1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFp
biYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVE
b21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVu
YWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92
ZXJyaWRlOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRv
cEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3cs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBs
b2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJv
b2wgaXNNYWluRnJhbWUpIG92ZXJyaWRlOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNv
bnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxv
YWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdh
bGxUaW1lIGxhc3RTZWVuKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJl
Y3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4m
KSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRMYXN0U2Vl
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNlY29uZHMpIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGJvb2wgaW5zZXJ0T2JzZXJ2ZWREb21haW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpOworICAgIHZvaWQgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAoV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5zaWduZWQgZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbik7CisgICAgYm9vbCByZWxhdGlvbnNoaXBFeGlzdHMo
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5zaWduZWQgZmlyc3REb21haW5JRCwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFpbikgY29uc3Q7CisgICAgdW5zaWduZWQgZG9t
YWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgYm9vbCBjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3Q7CisjZW5kaWYKKyAgICB2b2lkIHVwZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiwgV2FsbFRpbWUpOworICAgIHZvaWQgc2V0VXNlckludGVyYWN0aW9uKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrKCkgY29uc3Q7CisK
KyAgICBzdHJ1Y3QgUHJldmFsZW50RG9tYWluRGF0YSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFp
bklEOworICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RlcmFibGVEb21haW47CisgICAg
ICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lOworICAgICAgICBib29s
IGhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICAgICAgYm9vbCBncmFuZGZhdGhlcmVkOworICAgIH07
CisgICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRhdGE+IHByZXZhbGVudERvbWFpbnMoKSBjb25z
dDsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9ucygpIGNv
bnN0OworICAgIHZvaWQgY2xlYXJFeHBpcmVkVXNlckludGVyYWN0aW9ucygpOworICAgIHZvaWQg
Y2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5zaWduZWQ+JiYpOworICAgIGJvb2wgaGFzVXNl
ckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdCh1bnNpZ25lZCBkb21haW5JRCwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICB2b2lkIGluY3JlbWVudFJlY29yZHNE
ZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYpIG92ZXJy
aWRlOworCisgICAgdm9pZCByZWNsYXNzaWZ5UmVzb3VyY2VzKCk7CisgICAgc3RydWN0IE5vdFZl
cnlQcmV2YWxlbnRSZXNvdXJjZXMgeworICAgICAgICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3Rl
cmFibGVEb21haW47CisgICAgICAgIFJlc291cmNlTG9hZFByZXZhbGVuY2UgcHJldmFsZW5jZTsK
KyAgICAgICAgdW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50Owor
ICAgICAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAg
ICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudDsKKyAgICAgICAg
dW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50OworICAgIH07CisgICAgSGFz
aE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gZmluZE5vdFZlcnlQcmV2
YWxlbnRSZXNvdXJjZXMoKTsKKworICAgIGJvb2wgcHJlZGljYXRlVmFsdWVGb3JEb21haW4oV2Vi
Q29yZTo6U1FMaXRlU3RhdGVtZW50JiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsK
KworICAgIGVudW0gY2xhc3MgQ29va2llVHJlYXRtZW50UmVzdWx0IHsgQWxsb3csIEJsb2NrQW5k
S2VlcCwgQmxvY2tBbmRQdXJnZSB9OworICAgIENvb2tpZVRyZWF0bWVudFJlc3VsdCBjb29raWVU
cmVhdG1lbnRGb3JPcmlnaW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
UmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CisgICAgdW5zaWduZWQgcmVjdXJzaXZlbHlGaW5kTm9u
UHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1h
cnlEb21haW5JRCwgU3RkU2V0PHVuc2lnbmVkPiYgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3Vy
Y2VzLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKTsKKyAgICB2b2lkIHNldERvbWFp
bnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgT3B0aW9u
YWw8RnJhbWVJRD4sIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHZvaWQgbWFya0FzUHJldmFsZW50
SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOworICAg
IHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisgICAgZW51bSBjbGFz
cyBBZGRlZFJlY29yZCB7IE5vLCBZZXMgfTsKKyAgICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHVu
c2lnbmVkPiBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVn
aXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNEYXRhYmFzZVN0b3JlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
Ym9vbCBjcmVhdGVTY2hlbWEoKTsKKyAgICBib29sIHByZXBhcmVTdGF0ZW1lbnRzKCk7CisgICAg
CisgICAgY29uc3QgU3RyaW5nIG1fc3RvcmFnZURpcmVjdG9yeVBhdGg7CisgICAgbXV0YWJsZSBX
ZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFiYXNlOworICAgIG11dGFibGUgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50IG1fb2JzZXJ2ZWREb21haW5Db3VudDsKKyAgICBXZWJDb3JlOjpTUUxp
dGVTdGF0ZW1lbnQgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudDsKKyAgICBXZWJDb3Jl
OjpTUUxpdGVTdGF0ZW1lbnQgbV9pbnNlcnRUb3BMZXZlbERvbWFpblN0YXRlbWVudDsKKyAgICBt
dXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRl
bWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdG9yYWdlQWNjZXNzVW5kZXJU
b3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQ7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbzsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHM7CisgICAgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tOworICAgIG11dGFi
bGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9t
RXhpc3RzOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnM7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHM7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluczsKKyAgICBtdXRhYmxlIFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0
czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQg
bV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb207CisgICAgbXV0YWJsZSBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHM7Cisg
ICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0
YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91cGRhdGVMYXN0U2VlblN0
YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBt
X2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFibGUg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQ7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2hhZFVz
ZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91
cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50IG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19C
RUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKQorICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzRGF0YWJhc2VTdG9yZSgpOyB9CitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAppbmRleCAxN2NhNTdmOGYxNGRhZmI3OGJhOGJj
YWYwYjEyY2E5M2RiODUwM2E4Li5lMzQ0MWYzNGJhMjdhNGE5OTVmYjczZDMzMGU3MmI5YTU1MDk2
MWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmNwcApAQCAtNDksOTQgKzQ5LDYgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogY29uc3RleHByIHVuc2lnbmVkIHN0YXRpc3RpY3NNb2RlbFZlcnNp
b24geyAxNSB9OwotY29uc3RleHByIHVuc2lnbmVkIG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJ
blJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKLWNvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0
aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Ci1jb25zdGV4cHIgdW5zaWduZWQgb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OwotY29uc3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFu
Y2UgeyAzIH07Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLXN0YXRpYyBTdHJpbmcgZG9t
YWluc1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCi17
Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWlucykgewotICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQotICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW4u
c3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotI2Vu
ZGlmCi0KLWNsYXNzIE9wZXJhdGluZ0RhdGUgewotcHVibGljOgotICAgIE9wZXJhdGluZ0RhdGUo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2Fs
bFRpbWUgdGltZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNl
RXBvY2goKS5taWxsaXNlY29uZHMoKTsKLSAgICAgICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7
Ci0gICAgICAgIGludCB5ZWFyRGF5ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKLSAgICAgICAgaW50
IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwot
ICAgICAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBp
c0xlYXBZZWFyKHllYXIpKTsKLQotICAgICAgICByZXR1cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIs
IG1vbnRoLCBtb250aERheSB9OwotICAgIH0KLQotICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIHRv
ZGF5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUo
V2FsbFRpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAgICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2No
KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20x
OTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBzZWNvbmRzUGVyRGF5IH07Ci0gICAg
fQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbW9udGhEYXkgPT0gb3RoZXIubV9tb250aERheSAm
JiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYgbV95ZWFyID09IG90aGVyLm1feWVhcjsKLSAg
ICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPChjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDwgb3RoZXIuc2Vj
b25kc1NpbmNlRXBvY2goKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3Bl
cmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gc2Vjb25kc1Np
bmNlRXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBtb250aERheSkK
LSAgICAgICAgOiBtX3llYXIoeWVhcikKLSAgICAgICAgLCBtX21vbnRoKG1vbnRoKQotICAgICAg
ICAsIG1fbW9udGhEYXkobW9udGhEYXkpCi0gICAgeyB9Ci0KLSAgICBpbnQgbV95ZWFyIHsgMCB9
OwotICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgotICAgIGludCBtX21vbnRoRGF5
IHsgMCB9OyAvLyBbMSwgMzFdLgotfTsKLQotc3RhdGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBt
ZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdE
YXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpCi17Ci0gICAgaWYgKGV4aXN0
aW5nRGF0ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGTW92ZShuZXdEYXRlcyk7Ci0K
LSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVyZ2VkRGF0ZXMoZXhpc3RpbmdEYXRlcy5zaXpl
KCkgKyBuZXdEYXRlcy5zaXplKCkpOwotCi0gICAgLy8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVj
dG9ycyBvZiBkYXRlcy4KLSAgICBzdGQ6Om1lcmdlKGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhp
c3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0ZXMuYmVnaW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdl
ZERhdGVzLmJlZ2luKCkpOwotICAgIC8vIFJlbW92ZSBkdXBsaWNhdGUgZGF0ZXMuCi0gICAgcmVt
b3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJnZWREYXRlcyk7Ci0KLSAgICAvLyBEcm9wIG9sZCBkYXRl
cyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hlcyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KLSAg
ICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCi0gICAg
ICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKLQotICAgIHJldHVybiBtZXJnZWREYXRlczsKLX0K
IAogc3RydWN0IFN0YXRpc3RpY3NMYXN0U2VlbiB7CiAgICAgUmVnaXN0cmFibGVEb21haW4gZG9t
YWluOwpAQCAtMTU1LDM2ICs2NywyNCBAQCBzdGF0aWMgdm9pZCBwcnVuZVJlc291cmNlcyhIYXNo
TWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYgcwogICAgICAg
ICBzdGF0aXN0aWNzTWFwLnJlbW92ZShzdGF0aXN0aWNzVG9QcnVuZVtpXS5kb21haW4pOwogfQog
Ci1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCi17Ci0gICAgdW5zaWduZWQgaW1wb3J0YW5jZSA9
IG1heEltcG9ydGFuY2U7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJl
c291cmNlKQotICAgICAgICBpbXBvcnRhbmNlIC09IDE7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRp
c3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAgICAgIGltcG9ydGFuY2UgLT0gMjsKLSAgICBy
ZXR1cm4gaW1wb3J0YW5jZTsKLX0KLQogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3b3JrUXVldWUpCi0gICAgOiBtX3N0b3JlKHN0
b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1ZXVlKQorICAgIDogUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZWdpc3RlclVzZXJEZWZhdWx0
c0lmTmVlZGVkKCk7CiAjZW5kaWYKLSAgICBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5l
Y2Vzc2FyeSgpOwogCi0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAgICB0aGlzLT53b3JrUXVldWUoKS0+ZGlzcGF0
Y2hBZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gewogICAgICAgICBp
ZiAod2Vha1RoaXMpCiAgICAgICAgICAgICB3ZWFrVGhpcy0+Y2FsY3VsYXRlQW5kU3VibWl0VGVs
ZW1ldHJ5KCk7CiAgICAgfSk7CiB9CiAKLVJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgpCitib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNFbXB0eSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlz
RW1wdHkoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZSYgcGVyc2lzdGVudFN0b3JhZ2UpCkBAIC0xOTYsNzkgKzk2LDE2IEBAIHZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBj
b25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYgKG1fcGFy
YW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkpCisgICAgaWYgKHBhcmFtZXRlcnMoKS5zaG91
bGRTdWJtaXRUZWxlbWV0cnkpCiAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxl
bWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wg
dmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgbV9wYXJhbWV0
ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsID0gdmFs
dWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTaG91
bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5ID0gdmFsdWU7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVEYXRh
UmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3Vu
dEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zV2l0aERlbGV0
ZWRXZWJzaXRlRGF0YSkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgewotICAgICAgICBjYWxsYmFjaygpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Ci0gICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8m
IHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNz
ZXMoKSkKLSAgICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuYWRkKHBsdWdpbi0+cGx1Z2luUHJv
Y2Vzc1Rva2VuKCkpOwotI2VuZGlmCi0KLSAgICBhdXRvIHByZXZhbGVudFJlc291cmNlRG9tYWlu
cyA9IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKLSAgICBpZiAo
cHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgewotICAgICAgICBjYWxsYmFjaygp
OwotICAgICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zV2l0aERl
bGV0ZWRXZWJzaXRlRGF0YSkgeworICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOworICAgICAgICArK3N0
YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiAgICAgfQotCi0jaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMg
Zm9yICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZhbGVudFJlc291cmNlRG9tYWlu
cykudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIHNldERhdGFSZWNvcmRzQmVpbmdSZW1v
dmVkKHRydWUpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNv
dXJjZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFt
ZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1
ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCF3
ZWFrVGhpcykgewotICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIHdlYWtUaGlzLT5tX3N0b3JlLmRlbGV0ZVdlYnNpdGVEYXRh
Rm9yUmVnaXN0cmFibGVEb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBXVEZNb3ZlKHByZXZh
bGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1v
dmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXShjb25zdCBIYXNo
U2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11
dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbZG9tYWluc1dpdGhEZWxl
dGVkV2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0
ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkb21h
aW4gOiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgewotICAgICAgICAgICAgICAgICAg
ICBhdXRvJiBzdGF0aXN0aWMgPSB3ZWFrVGhpcy0+ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICAgICAgICAgICAgICAgICAgKytzdGF0aXN0
aWMuZGF0YVJlY29yZHNSZW1vdmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB3ZWFrVGhpcy0+c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoZmFsc2UpOwotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVk
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHJlbW92aW5nIGRhdGEgcmVjb3Jk
cy4iKTsKLSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwogfQog
CiB1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlY3Vyc2l2ZWx5
R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0RvbWFpbihjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgSGFzaFNldDxSZWdpc3RyYWJsZURv
bWFpbj4mIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5zaWduZWQgbnVtYmVyT2ZSZWN1
cnNpdmVDYWxscykgY29uc3QKQEAgLTMyOSw1MyArMTY2LDQwIEBAIHZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1By
ZXZhbGVuCiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ByZXZh
bGVudER1ZVRvRGVidWdNb2RlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlz
dGljKQogewotICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQorICAgIGlmICghZGVidWdNb2Rl
RW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcmVzb3VyY2VT
dGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gbV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291
cmNlIHx8IHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluID09IG1fZGVidWdNYW51
YWxQcmV2YWxlbnRSZXNvdXJjZTsKKyAgICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0
cmFibGVEb21haW4gPT0gZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpIHx8IHJlc291cmNl
U3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluID09IGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnByb2Nl
c3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkKIHsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChtX3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpIHsKLSAgICAgICAgZm9yIChhdXRv
JiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7
Ci0gICAgICAgICAgICBpZiAoaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShyZXNvdXJjZVN0YXRp
c3RpYykpCi0gICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0
aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSB7Ci0gICAgICAg
ICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQocmVzb3Vy
Y2VTdGF0aXN0aWMpOwotICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudFByZXZhbGVuY2UgPSBy
ZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID8gUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdzsKLSAgICAgICAgICAgICAg
ICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
LmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0YXRpc3RpYywgY3VycmVudFBy
ZXZhbGVuY2UpOwotICAgICAgICAgICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IGN1cnJlbnRQ
cmV2YWxlbmNlKQotICAgICAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChh
dXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygp
KSB7CisgICAgICAgIGlmIChpc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKHJlc291cmNlU3RhdGlz
dGljKSkKKyAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGlj
LCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICAgICAgZWxzZSBpZiAoIXJlc291
cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICBtYXJr
QXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChyZXNvdXJjZVN0YXRpc3RpYyk7
CisgICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNlID0gcmVzb3VyY2VTdGF0aXN0aWMu
aXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2ggOiBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7CisgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2Ug
PSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNlU3RhdGlz
dGljLCBjdXJyZW50UHJldmFsZW5jZSk7CisgICAgICAgICAgICBpZiAobmV3UHJldmFsZW5jZSAh
PSBjdXJyZW50UHJldmFsZW5jZSkKKyAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJj
ZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7CiAgICAgICAgIH0KICAgICB9Cit9
CiAKLSAgICByZW1vdmVEYXRhUmVjb3JkcyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigq
dGhpcyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHBy
dW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdl
KQotICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2NoZWR1bGVPcldyaXRlTWVtb3J5
U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOjpGb3JjZUltbWVk
aWF0ZVdyaXRlOjpObyk7Ci0KLSAgICAgICAgaWYgKCFtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHdlYWtUaGlzID0gV1RGTW92
ZSh3ZWFrVGhpcyldKCkgewotICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5bmNTdG9yYWdlSWZOZWVkZWQo
KQoreworICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAgICAgICBtX3BlcnNpc3RlbnRT
dG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKK30KIAotICAgICAg
ICAgICAgbV9zdG9yZS5ub3RpZnlSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUHJvY2Vzc2VkKCk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKQoreworICAgIGlmIChtX3BlcnNpc3RlbnRTdG9y
YWdlKQorICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlT
dG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRp
YXRlV3JpdGU6Olllcyk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJGcmFtZURv
bWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBPcHRpb25hbDx1
aW50NjRfdD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZy
YW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFs
PEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTM5MCw3ICsyMTQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbgogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9y
ZSA9IG1ha2VSZWYobV9zdG9yZSksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5
KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0
b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5p
c29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBzdG9yZS0+Y2FsbEhhc1N0b3JhZ2VB
Y2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFt
ZUlELnZhbHVlKCksIHBhZ2VJRCwgW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHJlc3VsdCkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHJlc3VsdF0gKCkgbXV0
YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKQEAgLTM5
OSwxNCArMjIzLDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpo
YXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluCiAgICAgfSk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vz
cyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBSZWdpc3RyYWJsZURvbWFpbiYm
IHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wg
cHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVz
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9t
YWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlEIGZyYW1lSUQsIHVp
bnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFp
bik7CiAgICAgaWYgKHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVzKHN1YkZyYW1lU3RhdGlzdGlj
KSkgewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
Q2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tp
ZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVj
ZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1
Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkNhbm5vdCBn
cmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBi
bG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGFuZCBpdCBoYXMgbm90IHJlY2VpdmVkIHVz
ZXIgaW50ZXJhY3Rpb24gYXMgZmlyc3QtcGFydHkuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFn
ZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CiAgICAgICAgIHJldHVybjsKQEAg
LTQxNCw3ICsyMzgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJgogCiAgICAgaWYgKCFzaG91
bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGljKSkgewogI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5n
RW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBz
dG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxv
Y2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdF
bmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQg
c3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUgbm90IGJs
b2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFn
ZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDIzLDEzICsy
NDcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYKICAgICBhdXRvIHVzZXJXYXNQcm9tcHRl
ZEVhcmxpZXIgPSBwcm9tcHRFbmFibGVkICYmIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Ro
cm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0aXN0aWMsIHRvcEZyYW1lRG9tYWluKTsKICAgICBpZiAo
cHJvbXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21wdGVkRWFybGllcikgewogI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5n
RW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gYXNrIHRoZSB1
c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGlj
fXMgdW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdh
bnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31z
IG9yIG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFt
ZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJlc1VzZXJQcm9tcHQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfSBlbHNlIGlmICh1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CiAj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9k
ZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdl
IGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMuIiwgc3Vi
RnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dn
aW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdlIGFjY2Vz
cyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMuIiwgc3ViRnJhbWVE
b21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTQ0MCw3ICsyNjQsNyBAQCB2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVn
aXN0cmFibGVEb21haW4mJgogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihSZWdpc3RyYWJs
ZURvbWFpbiYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcywgdWludDY0X3Qgb3BlbmVyUGFn
ZUlELCBSZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcywg
T3BlbmVyUGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3BlbmVyRG9tYWluKQog
ewogICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3BlbmVyRG9tYWlu
KTsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTQ1NiwxMiArMjgwLDEyIEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKFJlZ2lzdHJhCiAgICAgICAgIHJldHVybjsKIAogI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAotICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFi
bGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJhdGliaWxp
dHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtwdWJsaWN9cyB1bmRlciBv
cGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUg
b3BlbmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIFJF
TEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2Vz
cyB3YXMgZ3JhbnRlZCBmb3IgJXtwdWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVi
bGljfXMsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iLCBkb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb3BlbmVyRG9t
YWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgZ3JhbnRTdG9yYWdlQWNj
ZXNzSW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBXVEZNb3Zl
KG9wZW5lckRvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVyUGFnZUlELCBmYWxzZSwgW10oYm9v
bCkgeyB9KTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omdy
YW50U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBSZWdp
c3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1l
RG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlE
LCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCkBAIC00NzMsNyArMjk3LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFp
biYmIHMKICAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9t
YWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1By
b21wdGVkTm93LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChS
ZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBSZWdpc3RyYWJsZURvbWFpbiYmIHRv
cEZyYW1lRG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlE
LCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1l
RG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBPcHRpb25hbDxGcmFtZUlE
PiBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGll
ciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKIHsKICAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNDgzLDE0ICszMDcsMTQgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFs
KFJlZ2lzdHJhYmxlRG8KICAgICB9CiAKICAgICAvLyBGSVhNRTogUmVtb3ZlIG1fc3RvcmFnZUFj
Y2Vzc1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBpcyBubyBsb25nZXIgZXhwZXJp
bWVudGFsLgotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIgJiYgbV9zdG9yYWdl
QWNjZXNzUHJvbXB0c0VuYWJsZWQpIHsKKyAgICBpZiAodXNlcldhc1Byb21wdGVkTm93T3JFYXJs
aWVyICYmIHN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCgpKSB7CiAgICAgICAgIGF1dG8mIHN1
YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oc3ViRnJhbWVEb21haW4pOwogICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0aXN0aWMu
aGFkVXNlckludGVyYWN0aW9uKTsKICAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdGlzdGljLnN0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucy5jb250YWlucyh0b3BGcmFtZURvbWFpbikp
OwogICAgICAgICBzdWJGcmFtZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSA9IFdhbGxUaW1lOjpub3coKTsKICAgICB9CiAKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3N1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZy
YW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJ
RCwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
XSgpIG11dGFibGUgeworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3ViRnJhbWVEb21h
aW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BG
cmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBzdG9yZSA9IG1ha2VS
ZWYoc3RvcmUoKSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CiAg
ICAgICAgIHN0b3JlLT5jYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFuZGxlcihzdWJGcmFtZURvbWFp
biwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2NhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayksIHN0b3JlID0gc3RvcmUuY29weVJlZigpXShib29sIHZhbHVlKSBtdXRhYmxlIHsK
ICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY2FsbGJhY2sg
PSBXVEZNb3ZlKGNhbGxiYWNrKSwgdmFsdWVdICgpIG11dGFibGUgewogICAgICAgICAgICAgICAg
IGNhbGxiYWNrKHZhbHVlKTsKQEAgLTQ5OSwxMDUgKzMyMywzOCBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoUmVnaXN0
cmFibGVEbwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21h
aW4+JiBkb21haW5zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwg
Y2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCksIHN0
b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5yZWdp
c3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldIChIYXNo
U2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpIG11dGFibGUg
ewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3ZlKHdl
YWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSA9IGNyb3NzVGhyZWFkQ29weShkb21haW5z
V2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zV2l0aFdl
YnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IHdlYWtU
aGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4p
OwotICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3JhbmRm
YXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJhbWV0
ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsKLSAgICAgICAgICAgICAgICBpZiAod2Vha1RoaXMtPm1f
cGVyc2lzdGVudFN0b3JhZ2UpCi0gICAgICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5tX3BlcnNp
c3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Olllcyk7Ci0gICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bG9nVGVz
dGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9
KTsKLSAgICB9KTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAg
YXV0byYgc3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4oZG9tYWluKTsKKyAgICAgICAgc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQgPSB0cnVlOwor
ICAgIH0KIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpCiB7
Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCisgICAgaWYgKCFkZWJ1Z01vZGVFbmFibGVk
KCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IGRvbWFpbnNUb0Jsb2NrOwogICAgIGRvbWFpbnNUb0Jsb2NrLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoMik7CiAKLSAgICBhdXRvJiBzdGF0aWNTZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVidWdTdGF0aWNQcmV2YWxlbnRS
ZXNvdXJjZSk7CisgICAgYXV0byYgc3RhdGljU2Vzb3VyY2VTdGF0aXN0aWMgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlKCkpOwogICAgIHNldFByZXZhbGVudFJlc291cmNlKHN0YXRpY1Nlc291cmNlU3RhdGlz
dGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAgICBkb21haW5zVG9CbG9jay51
bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKTsKKyAgICBkb21h
aW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgp
KTsKIAotICAgIGlmICghbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLmlzRW1wdHkoKSkg
ewotICAgICAgICBhdXRvJiBtYW51YWxSZXNvdXJjZVN0YXRpc3RpYyA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNv
dXJjZSk7CisgICAgaWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuaXNFbXB0eSgp
KSB7CisgICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlzdGljID0gZW5zdXJlUmVzb3Vy
Y2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdNYW51YWxQcmV2YWxlbnRSZXNv
dXJjZSgpKTsKICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UobWFudWFsUmVzb3VyY2VTdGF0
aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotICAgICAgICBkb21haW5zVG9C
bG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAg
ICAgICAgZG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnTWFudWFsUHJldmFsZW50
UmVzb3VyY2UoKSk7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0Vf
TE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRGlkIHNldCAle3B1YmxpY31z
IGFzIHByZXZhbGVudCByZXNvdXJjZSBmb3IgdGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2Rl
LiIsIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcs
ICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0aGUgcHVycG9z
ZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgfQogICAgIAogICAgIHJldHVybiBk
b21haW5zVG9CbG9jazsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1ZywgIlR1cm5lZCBJVFAgRGVidWcgTW9kZSBvbi4iKTsKLSNlbmRpZgot
Ci0gICAgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5hYmxlOwotICAgIG1fZGVidWdMb2dnaW5nRW5h
YmxlZCA9IGVuYWJsZTsKLQotICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9k
ZSgpOwotICAgIC8vIFRoaXMgd2lsbCBsb2cgdGhlIGN1cnJlbnQgY29va2llIGJsb2NraW5nIHN0
YXRlLgotICAgIGlmIChlbmFibGUpCi0gICAgICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkg
eyB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21h
aW4pCi17Ci0gICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gZG9tYWluOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2NoZWR1bGVTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
ZGVudGlmaWVyID0gKyttX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVy
OwotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKG1pbmltdW1TdGF0aXN0aWNzUHJvY2Vz
c2luZ0ludGVydmFsLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSAqbV9wZW5kaW5nU3RhdGlzdGljc1By
b2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcl0gewotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWRlbnRpZmllciB8fCAqbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0SWRlbnRpZmllciAhPSBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVy
KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHJlcXVlc3QgaGFzIGJlZW4gY2FuY2VsZWQuCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1cGRhdGVDb29raWVCbG9ja2lu
ZyhbXSgpIHsgfSk7Ci0gICAgICAgIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNh
bmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0SWRlbnRpZmllciA9IFdURjo6bnVsbG9wdDsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVE
b21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRp
cmVjdCwgYm9vbCBpc01haW5GcmFtZSkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKQEAgLTYzNSw3ICszOTIsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRp
bmcoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRv
cEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIApAQCAtNjQ1LDcgKzQwMiw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVE
CiAgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3Nhcnko
KTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJl
c291cmNlUmVkaXJlY3QoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0
ZWRGcm9tRG9tYWluJiBzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYgdGFy
Z2V0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC02NTgs
NyArNDE1LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1
YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVnaXN0cmFibGUKICAgICAgICAgc2NoZWR1bGVTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiBkb21haW4pCiB7
CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTcyOCw3ICs0ODUsNyBAQCBi
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibAogICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNl
U3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLmlzUHJldmFsZW50
UmVzb3VyY2UgJiYgbWFwRW50cnktPnZhbHVlLmlzVmVyeVByZXZhbGVudFJlc291cmNlOwogfQog
Ci1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAorYm9vbCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3Vy
Y2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzM2LDcgKzQ5Myw3IEBAIGJvb2wgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29u
c3QgUmVnCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVu
ZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWlucy5jb250YWlucyh0b3BGcmFtZURvbWFpbik7CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dG9wRnJhbWVEb21haW4pIGNvbnN0Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBz
dWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25z
dAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03NDQsNyArNTAxLDcg
QEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3ViRnJhbWVVbmRlcihjb25zdCBSZWdpc3QKICAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNv
dXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1lRG9tYWluKTsKIH0KIAotYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJl
Y3RpbmdUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJlY3RlZEZyb21Eb21haW4sIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0Citib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRpcmVjdGVkRnJvbURvbWFpbiwgY29u
c3QgUmVkaXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9Eb21haW4pIGNvbnN0CiB7CiAgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc3Nyw3ICs1MzQsNyBAQCBib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJgogICAgIHJldHVybiBtYXBFbnRyeSA9PSBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVlLmdyYW5kZmF0aGVyZWQ7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9tYWlu
LCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mIHRvcEZyYW1lRG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CkBAIC03ODcsNyArNTQ0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWcKICAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291cmNl
RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCkBAIC03OTcsNyArNTU0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihj
b25zdAogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRv
cEZyYW1lRG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdERv
bWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNl
RG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgwNyw3ICs1NjQsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKGNvbnN0IFJlZwogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWlu
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04MTcsNyArNTc0LDcg
QEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFIKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NG
b3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04MjcsNyArNTg0LDcgQEAgdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBSZWdpc3QKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODM3LDk1ICs1OTQsNiBAQCB2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRp
cmVjdEZyb20oY29uc3QgUmVnaQogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBz
ZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChz
ZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbiA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyBzZWNv
bmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNv
bmRzID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJl
Y29yZHNSZW1vdmFsID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9z
KTsKLQotICAgIG1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRzOwotfQot
Ci12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VD
YXAoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMuY2FjaGVNYXhB
Z2VDYXBUaW1lID0gc2Vjb25kczsKLSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2FjaGVNYXhBZ2VD
YXAoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIAotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0g
bV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZV0gKCkgewotICAgICAgICBzdG9yZS0+c2V0
Q2FjaGVNYXhBZ2VDYXAoc2Vjb25kcywgW10geyB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29r
aWVzKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotICAgIAotICAgIG1fcGFyYW1ldGVycy5jbGll
bnRTaWRlQ29va2llc0FnZUNhcFRpbWUgPSBzZWNvbmRzOwotICAgIHVwZGF0ZUNsaWVudFNpZGVD
b29raWVzQWdlQ2FwKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQot
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBz
ZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZV0gKCkgewot
ICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBzdG9yZS0+bmV0d29ya1Nlc3Npb24o
KSkKLSAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5z
ZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhzZWNvbmRzKTsKLSAgICB9KTsKLSNlbmRpZgot
fQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2hvdWxkUmVtb3Zl
RGF0YVJlY29yZHMoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGZvciAoY29uc3QgYXV0
byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nl
c3NlcygpKSB7Ci0gICAgICAgIGlmICghbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY29udGFpbnMocGx1
Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiAhbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92
ZWQgfHwgTW9ub3RvbmljVGltZTo6bm93KCkgPj0gKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVS
ZW1vdmVkICsgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXREYXRh
UmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCA9IHZhbHVlOwotICAg
IGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQotICAgICAgICBtX2xhc3RUaW1lRGF0YVJl
Y29yZHNXZXJlUmVtb3ZlZCA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotfQotCiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC05NDEs
MTMgKzYwOSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNvZGVyPiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNyZWF0ZUVuY29kZXJGcgogCiAgICAgYXV0byBlbmNvZGVy
ID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7CiAgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKCJ2
ZXJzaW9uIiwgc3RhdGlzdGljc01vZGVsVmVyc2lvbik7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlRG91
YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcCgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CiAKICAgICBlbmNv
ZGVyLT5lbmNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3MiLCBtX3Jlc291cmNlU3RhdGlz
dGljc01hcC5iZWdpbigpLCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSwgW10oS2V5ZWRF
bmNvZGVyJiBlbmNvZGVySW5uZXIsIGNvbnN0IGF1dG8mIGRvbWFpbikgewogICAgICAgICBkb21h
aW4udmFsdWUuZW5jb2RlKGVuY29kZXJJbm5lcik7CiAgICAgfSk7CiAKLSAgICBlbmNvZGVyLT5l
bmNvZGVPYmplY3RzKCJvcGVyYXRpbmdEYXRlcyIsIG1fb3BlcmF0aW5nRGF0ZXMuYmVnaW4oKSwg
bV9vcGVyYXRpbmdEYXRlcy5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVySW5uZXIsIE9w
ZXJhdGluZ0RhdGUgZGF0ZSkgeworICAgIGF1dG8mIG9wZXJhdGluZ0RhdGVzID0gdGhpcy0+b3Bl
cmF0aW5nRGF0ZXMoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJvcGVyYXRpbmdEYXRl
cyIsIG9wZXJhdGluZ0RhdGVzLmJlZ2luKCksIG9wZXJhdGluZ0RhdGVzLmVuZCgpLCBbXShLZXll
ZEVuY29kZXImIGVuY29kZXJJbm5lciwgT3BlcmF0aW5nRGF0ZSBkYXRlKSB7CiAgICAgICAgIGVu
Y29kZXJJbm5lci5lbmNvZGVEb3VibGUoImRhdGUiLCBkYXRlLnNlY29uZHNTaW5jZUVwb2NoKCku
dmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTk2OSw5ICs2MzgsOSBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKEtleWVkRGVj
b2RlciYgZAogCiAgICAgZG91YmxlIGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CiAgICAg
aWYgKGRlY29kZXIuZGVjb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwg
ZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCkpCi0gICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhlbmRPZkdyYW5kZmF0aGVy
aW5nVGltZXN0YW1wKTsKKyAgICAgICAgdGhpcy0+ZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFt
cCgpID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3Rh
bXApOwogICAgIGVsc2UKLSAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0g
eyB9OworICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAoKTsKIAogICAg
IFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0aWNzOwogICAgIGJv
b2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3Mi
LCBsb2FkZWRTdGF0aXN0aWNzLCBbdmVyc2lvbk9uRGlza10oS2V5ZWREZWNvZGVyJiBkZWNvZGVy
SW5uZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsKQEAgLTk5Nyw3ICs2
NjYsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWVyZ2VXaXRo
RGF0YUZyb21EZWNvZGVyKEtleWVkRGVjb2RlciYgZAogICAgIGlmICghc3VjY2VlZGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX29wZXJhdGluZ0RhdGVzID0gbWVyZ2VPcGVyYXRpbmdEYXRl
cyhtX29wZXJhdGluZ0RhdGVzLCBXVEZNb3ZlKG9wZXJhdGluZ0RhdGVzKSk7CisgICAgdGhpcy0+
b3BlcmF0aW5nRGF0ZXMoKSA9IG1lcmdlT3BlcmF0aW5nRGF0ZXModGhpcy0+b3BlcmF0aW5nRGF0
ZXMoKSwgV1RGTW92ZShvcGVyYXRpbmdEYXRlcykpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTAwNSw3ICs2NzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZQogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgbV9yZXNvdXJjZVN0
YXRpc3RpY3NNYXAuY2xlYXIoKTsKLSAgICBtX29wZXJhdGluZ0RhdGVzLmNsZWFyKCk7CisgICAg
b3BlcmF0aW5nRGF0ZXMoKS5jbGVhcigpOwogCiAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAKQEAgLTEwNTYsMzkgKzcyNSw2IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0CiAgICAgcmV0
dXJuIHN0YXRpc3RpYy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnMo
Zmlyc3RQYXJ0eURvbWFpbik7CiB9CiAKLXN0YXRpYyB2b2lkIGRlYnVnTG9nRG9tYWluc0luQmF0
Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4m
IGRvbWFpbnMpCi17Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgc3RhdGljIGNvbnN0
IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQgPSA1MDsKLSAgICBpZiAo
ZG9tYWlucy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkb21haW5zLnNp
emUoKSA8PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgewotICAgICAgICBS
RUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7
cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3I6ICV7cHVibGljfXMu
IiwgYWN0aW9uLCBkb21haW5zVG9TdHJpbmcoZG9tYWlucykudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBi
YXRjaDsKLSAgICBiYXRjaC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1heE51bWJlck9mRG9tYWlu
c0luT25lTG9nU3RhdGVtZW50KTsKLSAgICBhdXRvIGJhdGNoTnVtYmVyID0gMTsKLSAgICB1bnNp
Z25lZCBudW1iZXJPZkJhdGNoZXMgPSBzdGQ6OmNlaWwoZG9tYWlucy5zaXplKCkgLyBzdGF0aWNf
Y2FzdDxmbG9hdD4obWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpKTsKLQotICAg
IGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoYmF0Y2guc2l6ZSgp
ID09IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7Ci0gICAgICAgICAgICBS
RUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7
cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQg
b2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hl
cywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIGJh
dGNoLnNocmluaygwKTsKLSAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7Ci0gICAgICAgIH0KLSAg
ICAgICAgYmF0Y2guYXBwZW5kKGRvbWFpbik7Ci0gICAgfQotICAgIGlmICghYmF0Y2guaXNFbXB0
eSgpKQotICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1
ZywgIkFib3V0IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBm
b3IgKCV7cHVibGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIs
IG51bWJlck9mQmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGRvbWFp
bnMpOwotI2VuZGlmCi19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Ojp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMTA0
LDUyICs3NDAsMjMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVw
ZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHYKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmIChtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgJiYgIWRvbWFpbnNUb0Jsb2Nr
LmlzRW1wdHkoKSkKKyAgICBpZiAoZGVidWdMb2dnaW5nRW5hYmxlZCgpICYmICFkb21haW5zVG9C
bG9jay5pc0VtcHR5KCkpCiAgICAgICAgIGRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcygiYmxvY2si
LCBkb21haW5zVG9CbG9jayk7CiAKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtU
aGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFp
bnNUb0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3Rv
cmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShk
b21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildICgpIG11dGFibGUgewogICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERv
bWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFt3ZWFrVGhpcyA9
IFdURk1vdmUod2Vha1RoaXMpLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBXVEZNb3Zl
KHdlYWtUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAg
ICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19J
TkZPX0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEZWJ1ZywgIkRvbmUgdXBkYXRpbmcgY29va2llIGJsb2NraW5nLiIpOworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPmRlYnVnTG9nZ2luZ0VuYWJsZWQo
KSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBjb29raWUgYmxv
Y2tpbmcuIik7CiAjZW5kaWYKICAgICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAgICB9KTsK
IH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tp
ZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21h
aW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNUb0Jsb2NrID0g
Y3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0b3JlLT5jYWxs
VXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9C
bG9jaywgW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgc3RvcmUtPnN0
YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGVhckJsb2NraW5nU3RhdGVG
b3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkgewotICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFp
bnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlucyldIHsKLSAgICAgICAgc3RvcmUtPmNhbGxSZW1v
dmVEb21haW5zSGFuZGxlcihkb21haW5zKTsKLSAgICB9KTsKLQotICAgIGNvbXBsZXRpb25IYW5k
bGVyKCk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9j
ZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKT4mIHByb2Nlc3NGdW5jdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKQEAgLTExNzgsMTEgKzc4NSwxMSBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0cmFibGVEb21haW5z
VAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgYm9vbCBzaG91bGRD
aGVja0ZvckdyYW5kZmF0aGVyaW5nID0gbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID4g
V2FsbFRpbWU6Om5vdygpOwotICAgIGJvb2wgc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFz
aG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYmIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcDsKKyAgICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBlbmRPZkdyYW5k
ZmF0aGVyaW5nVGltZXN0YW1wKCkgPiBXYWxsVGltZTo6bm93KCk7CisgICAgYm9vbCBzaG91bGRD
bGVhckdyYW5kZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpOwogCiAgICAgaWYgKHNob3VsZENsZWFyR3JhbmRm
YXRoZXJpbmcpCi0gICAgICAgIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsK
KyAgICAgICAgY2xlYXJFbmRPZkdyYW5kZmF0aGVyaW5nVGltZVN0YW1wKCk7CiAKICAgICBWZWN0
b3I8UmVnaXN0cmFibGVEb21haW4+IHByZXZhbGVudFJlc291cmNlczsKICAgICBmb3IgKGF1dG8m
IHN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnZhbHVlcygpKSB7CkBAIC0xMTk2
LDYyICs4MDMsMTYgQEAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdHJhYmxlRG9tYWluc1QKICAgICByZXR1cm4gcHJldmFs
ZW50UmVzb3VyY2VzOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYXV0byB0b2RheSA9IE9wZXJhdGluZ0RhdGU6
OnRvZGF5KCk7Ci0gICAgaWYgKCFtX29wZXJhdGluZ0RhdGVzLmlzRW1wdHkoKSAmJiB0b2RheSA8
PSBtX29wZXJhdGluZ0RhdGVzLmxhc3QoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUg
KG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQotICAgICAg
ICBtX29wZXJhdGluZ0RhdGVzLnJlbW92ZSgwKTsKLQotICAgIG1fb3BlcmF0aW5nRGF0ZXMuYXBw
ZW5kKHRvZGF5KTsKLX0KLQotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
Omhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291
cmNlU3RhdGlzdGljKSBjb25zdAotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93
KSB7Ci0gICAgICAgIGlmIChPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUocmVzb3VyY2VTdGF0
aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgbV9vcGVyYXRpbmdEYXRlcy5m
aXJzdCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgLy8gSWYgd2Ug
ZG9uJ3QgbWVldCB0aGUgcmVhbCBjcml0ZXJpYSBmb3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNo
ZWNrIHRoZSB1c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZv
ciB0ZXN0aW5nKS4KLSAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rp
b24pIHsKLSAgICAgICAgaWYgKFdhbGxUaW1lOjpub3coKSA+IHJlc291cmNlU3RhdGlzdGljLm1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb24udmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGFyYW1ldGVycy5t
YXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50OwotfQotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVf
dCBwcnVuZVRhcmdldENvdW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
Ci0gICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0Q291bnQ7
Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRp
c3RpY3NJZk5lZWRlZCgpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBpZiAobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgpIDw9IG1fcGFyYW1ldGVycy5tYXhT
dGF0aXN0aWNzRW50cmllcykKKyAgICBpZiAobV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuc2l6ZSgp
IDw9IHBhcmFtZXRlcnMoKS5tYXhTdGF0aXN0aWNzRW50cmllcykKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQVNTRVJUKG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8gPD0gbV9wYXJhbWV0
ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzKTsKKyAgICBBU1NFUlQocGFyYW1ldGVycygpLnBydW5l
RW50cmllc0Rvd25UbyA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpOwogCi0g
ICAgc2l6ZV90IG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuc2l6ZSgpIC0gbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbzsKKyAgICBzaXpl
X3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5z
aXplKCkgLSBwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvOwogICAgIEFTU0VSVChudW1i
ZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CiAKICAgICBWZWN0b3I8U3RhdGlzdGljc0xhc3RTZWVu
PiByZXNvdXJjZXNUb1BydW5lUGVySW1wb3J0YW5jZVttYXhJbXBvcnRhbmNlICsgMV07CkBAIC0x
MjY0LDIyICs4MjUsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogICAgIEFTU0VSVCghbnVtYmVyT2ZFbnRyaWVzTGVm
dFRvUHJ1bmUpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIG1fcGFyYW1ldGVycyA9IHsgfTsKLX0KLQotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcm
IGV2ZW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgUnVuTG9v
cDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGV2ZW50ID0gZXZl
bnQuaXNvbGF0ZWRDb3B5KCldIHsKLSAgICAgICAgc3RvcmUtPmxvZ1Rlc3RpbmdFdmVudChldmVu
dCk7Ci0gICAgfSk7Ci19Ci0KIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBTZWNvbmRzIHNl
Y29uZHMpCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CkBAIC0xMzA0LDI3ICs4
NDksNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VmVyeVBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYgogICAgIHNldFByZXZhbGVudFJlc291cmNl
KHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGlnaCk7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVBbGxTdG9y
YWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBSdW5Mb29wOjptYWluKCku
ZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgc3RvcmUtPnJl
bW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpkaWRD
cmVhdGVOZXR3b3JrUHJvY2VzcygpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0gICAgdXBkYXRlQ2FjaGVN
YXhBZ2VDYXAoKTsKLSAgICB1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKaW5kZXggZTMxMTc3YTEyYTk4Mjg3N2EwMGViMDY0
NDYzMTljMzNhY2YxOWIzNy4uY2ExZDkyYWRlY2MwYzRkNTBlN2U5Y2QzNDJkNTZkMTQxYzVhMGZi
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUu
aApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI3LDE3ICsyNywxMyBAQAogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElT
VElDUykKIAotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5k
bGVyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogCi0jaWYgSEFWRShDT1JFX1BSRURJQ1RJT04p
Ci0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5oIgotI2Vu
ZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEtleWVkRGVjb2RlcjsKIGNsYXNzIEtl
eWVkRW5jb2RlcjsKQEAgLTQ2LDM1ICs0MiwxOSBAQCBzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljczsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIE9wZXJhdGluZ0RhdGU7CiBjbGFz
cyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CiAKIC8vIFRoaXMgaXMg
YWx3YXlzIGNvbnN0cnVjdGVkIC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJ3Mgc3RhdGlzdGljcyBxdWV1ZS4KLWNsYXNzIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+IHsKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZSBmaW5hbCA6IHB1YmxpYyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgewog
cHVibGljOgotICAgIHVzaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgPSBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzOwotICAgIHVzaW5nIFJlZ2lzdHJhYmxlRG9tYWluID0gV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgVG9wRnJhbWVEb21haW4gPSBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBTdWJGcmFtZURvbWFpbiA9IFdlYkNvcmU6
OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFN1YlJlc291cmNlRG9tYWluID0gV2ViQ29y
ZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3REb21haW4gPSBXZWJDb3Jl
OjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVjdGVkRnJvbURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0ZWRUb0RvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE5hdmlnYXRlZEZyb21Eb21h
aW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBOYXZpZ2F0ZWRUb0Rv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIERvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5n
IE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIE9w
ZW5lclBhZ2VJRCA9IHVpbnQ2NF90OwotICAgIHVzaW5nIFBhZ2VJRCA9IHVpbnQ2NF90OwotICAg
IHVzaW5nIEZyYW1lSUQgPSB1aW50NjRfdDsKLQogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsK
LSAgICB+UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKCk7CiAKICAgICB2b2lkIHNl
dFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZSYpOwogCi0gICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAg
IGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmlz
RW1wdHkoKTsgfQorICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKSBv
dmVycmlkZTsKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZTsKKworICAgIGNvbnN0
IEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7IH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpLZXllZEVuY29kZXI+IGNyZWF0ZUVuY29kZXJG
cm9tRGF0YSgpIGNvbnN0OwogICAgIHZvaWQgbWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKFdlYkNv
cmU6OktleWVkRGVjb2RlciYpOwpAQCAtODIsMTQ3ICs2Miw4MSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBtZXJnZVN0YXRpc3RpY3MoVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+JiYpOwogICAg
IHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik+JikgY29uc3Q7CiAKLSAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVDb29raWVC
bG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjbGVhckJsb2NraW5nU3RhdGVGb3JE
b21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5l
Y2Vzc2FyeSgpOwotICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwot
Ci0gICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmKTsKLSAgICB2b2lk
IHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLQot
ICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7Ci0gICAgdm9pZCBjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0KCk7CisgICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpIG92ZXJyaWRlOwogCi0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0OwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFN1YkZy
YW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdDsKLSAgICBib29sIGlzUmVn
aXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0
IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0OworICAgIHZvaWQgY2xhc3NpZnlQcmV2YWxlbnRS
ZXNvdXJjZXMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSWZOZWVkZWQoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKSBvdmVycmlkZTsKIAotICAg
IHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwot
ICAgIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIGNvbnN0OwotICAgIGJvb2wg
aXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAg
IGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdDsKLSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJik7Ci0gICAgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mKTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9t
YWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiwgYm9vbCB2YWx1ZSk7Ci0gICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKSBjb25zdDsKKyAgICB2b2lkIGdyYW5kZmF0aGVyRGF0YUZvckRvbWFp
bnMoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKSBvdmVycmlkZTsKIAotICAgIHZv
aWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWlu
Jik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVz
b3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOwotICAgIHZvaWQgc2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBS
ZWRpcmVjdERvbWFpbiYpOwotICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3REb21haW4mKTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRl
cihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3Vi
RnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9t
YWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsZWFyUHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBTdHJp
bmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2
b2lkIHNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnlDb3VudCk7Ci0g
ICAgdm9pZCBzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpOwot
ICAgIHZvaWQgcmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKCk7CisgICAgdm9pZCBzZXRH
cmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCB2YWx1ZSkgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBj
b25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgY2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3Vi
RnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWlu
JiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGly
ZWN0RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9w
RnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25z
dCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOwotICAgIHZvaWQgc2V0U2hvdWxkQ2xhc3Np
ZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7Ci0gICAgdm9pZCBzZXRT
aG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCk7Ci0gICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKFNlY29uZHMpOwotICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKFNlY29uZHMpOwotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNl
Y29uZHMpOwotICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29s
KTsKLSAgICBib29sIGlzRGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdN
b2RlRW5hYmxlZDsgfTsKLSAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2Rl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRU
ZWxlbWV0cnkoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhj
b25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJh
bWVJRD4sIFBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7Ci0gICAgdm9p
ZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYm
LCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJik7Ci0gICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nl
c3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBi
b29sIHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7
CisgICAgdm9pZCBoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNj
ZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwg
Ym9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NT
dGF0dXMpPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFt
ZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgdXNlcldh
c1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBvdmVycmlkZTsK
IAotICAgIHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBp
c1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKTsKLSAgICB2b2lkIGxvZ1VzZXJJbnRlcmFjdGlv
bihjb25zdCBUb3BGcmFtZURvbWFpbiYpOwotICAgIHZvaWQgbG9nU3VicmVzb3VyY2VMb2FkaW5n
KGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mLCBXYWxsVGlt
ZSBsYXN0U2Vlbik7Ci0gICAgdm9pZCBsb2dTdWJyZXNvdXJjZVJlZGlyZWN0KGNvbnN0IFJlZGly
ZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJik7CisgICAgdm9pZCBs
b2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJv
b2wgaXNNYWluRnJhbWUpIG92ZXJyaWRlOworICAgIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNv
bnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxv
YWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdh
bGxUaW1lIGxhc3RTZWVuKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJl
Y3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4m
KSBvdmVycmlkZTsKIAotICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKTsKLSAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRMYXN0
U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNlY29uZHMpOwotCi0gICAgdm9pZCBkaWRD
cmVhdGVOZXR3b3JrUHJvY2VzcygpOwotCi0gICAgY29uc3QgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7IH0KKyAgICB2b2lkIHNl
dExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcykgb3ZlcnJpZGU7CiAK
IHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tBbmRLZWVwQ29va2llcyhjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQmxvY2tB
bmRQdXJnZUNvb2tpZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHN0YXRp
YyBib29sIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoY29uc3QgUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CiAgICAgYm9v
bCBoYXNIYWRVbmV4cGlyZWRSZWNlbnRVc2VySW50ZXJhY3Rpb24oUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpIGNvbnN0OwotICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0OwogICAgIGJvb2wgd2FzQWNjZXNzZWRBc0ZpcnN0UGFy
dHlEdWVUb1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBjdXJy
ZW50LCBjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiB1cGRhdGVkKSBjb25zdDsKKyAgICB2
b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+JiYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2Uo
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIFJlc291cmNlTG9hZFByZXZhbGVuY2UpOwogICAgIHVu
c2lnbmVkIHJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0Rv
bWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgSGFzaFNldDxSZWRpcmVjdGVkVG9E
b21haW4+JiwgdW5zaWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fc3RvcmFn
ZUFjY2Vzc1Byb21wdHNFbmFibGVkICA9IGVuYWJsZWQ7IH0KLSAgICBib29sIHNob3VsZFJlbW92
ZURhdGFSZWNvcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVuYWJsZWQ7IH0KLSAgICB2
b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOwotICAgIHZvaWQgc2NoZWR1bGVT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwogICAgIHZvaWQgZ3JhbnRT
dG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwg
T3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxp
ZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwogICAgIHZvaWQgbWFya0FzUHJl
dmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYp
OwogICAgIGJvb2wgaXNQcmV2YWxlbnREdWVUb0RlYnVnTW9kZShSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik7Ci0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBlbnN1cmVQcmV2YWxlbnRSZXNv
dXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3Vy
ZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVt
b3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIHBy
dW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7CisgICAgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRl
ZCgpIG92ZXJyaWRlOwogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7
Ci0gICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92
ZVdlYnNpdGVEYXRhRm9yKCk7Ci0gICAgdm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzKTsK
LSAgICB2b2lkIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Ci0gICAgdm9pZCBzZXRBZ2VDYXBGb3JD
bGllbnRTaWRlQ29va2llcyhTZWNvbmRzKTsKLSAgICB2b2lkIHVwZGF0ZUNsaWVudFNpZGVDb29r
aWVzQWdlQ2FwKCk7Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICB2b2lkIHJlZ2lzdGVyVXNl
ckRlZmF1bHRzSWZOZWVkZWQoKTsKLSNlbmRpZgorICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFp
bj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpIG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNNZW1vcnlTdG9yZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKwog
Ci0gICAgc3RydWN0IFBhcmFtZXRlcnMgewotICAgICAgICBzaXplX3QgcHJ1bmVFbnRyaWVzRG93
blRvIHsgODAwIH07Ci0gICAgICAgIHNpemVfdCBtYXhTdGF0aXN0aWNzRW50cmllcyB7IDEwMDAg
fTsKLSAgICAgICAgT3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbjsK
LSAgICAgICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgeyAx
X2ggfTsKLSAgICAgICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUgeyAyNF9oICogNyB9Owot
ICAgICAgICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07Ci0gICAgICAg
IFNlY29uZHMgY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lIHsgMjRfaCAqIDcgfTsKLSAgICAg
ICAgYm9vbCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkIHsgZmFs
c2UgfTsKLSAgICAgICAgYm9vbCBzaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNv
cmRzUmVtb3ZhbCB7IHRydWUgfTsKLSAgICAgICAgYm9vbCBzaG91bGRTdWJtaXRUZWxlbWV0cnkg
eyB0cnVlIH07Ci0gICAgfTsKLQotICAgIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYg
bV9zdG9yZTsKLSAgICBSZWY8V29ya1F1ZXVlPiBtX3dvcmtRdWV1ZTsKICAgICBXZWFrUHRyPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0ZW50U3RvcmFn
ZTsKICAgICBIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
PiBtX3Jlc291cmNlU3RhdGlzdGljc01hcDsKLSNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKLSAg
ICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0NsYXNzaWZpZXI7Ci0jZWxzZQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFz
c2lmaWVyIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7Ci0jZW5kaWYKLSNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2FjdGl2
ZVBsdWdpblRva2VuczsKLSNlbmRpZgotICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOwotICAg
IFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOwotICAgIFdhbGxUaW1lIG1f
ZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKLSAgICBib29sIG1fZGVidWdMb2dnaW5nRW5h
YmxlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQgeyBmYWxzZSB9Owot
ICAgIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluIG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJj
ZSB7IFVSTCB7IFVSTCgpLCAiaHR0cHM6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQub3JnIl9zIH0gfTsK
LSAgICBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2U7Ci0g
ICAgYm9vbCBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkIHsgZmFsc2UgfTsKLSAgICBNb25vdG9uaWNUaW1l
IG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkOwotCi0gICAgdWludDY0X3QgbV9sYXN0
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAgfTsKLSAgICBPcHRpb25h
bDx1aW50NjRfdD4gbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmll
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKQorICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzTWVtb3J5U3RvcmUoKTsgfQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZkODRkNjgwMDY4NGEyYTg5N2ZiOGJhOTRjYWFl
Y2EzNmMyNTI4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0wLDAgKzEs
NTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RB
VElTVElDUykKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JrU2Vzc2lv
bi5oIgorI2luY2x1ZGUgIlBsdWdpblByb2Nlc3NNYW5hZ2VyLmgiCisjaW5jbHVkZSAiUGx1Z2lu
UHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3Rl
bnRTdG9yYWdlLmgiCisjaW5jbHVkZSAiU3RvcmFnZUFjY2Vzc1N0YXR1cy5oIgorI2luY2x1ZGUg
IldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZWxlbWV0cnkuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9LZXllZENvZGluZy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNz
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5j
bHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5o
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitjb25zdGV4cHIgU2Vjb25kcyBtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZh
bCB7IDVfcyB9OworY29uc3RleHByIHVuc2lnbmVkIG9wZXJhdGluZ0RhdGVzV2luZG93IHsgMzAg
fTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorc3RhdGljIFN0cmluZyBkb21haW5zVG9T
dHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7
CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRvbWFpbi5zdHJpbmco
KSk7CisgICAgfQorICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisjZW5kaWYKKwor
T3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkK
K3sKKyAgICBkb3VibGUgbXMgPSB0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkubWlsbGlzZWNvbmRz
KCk7CisgICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7CisgICAgaW50IHllYXJEYXkgPSBkYXlJ
blllYXIobXMsIHllYXIpOworICAgIGludCBtb250aCA9IG1vbnRoRnJvbURheUluWWVhcih5ZWFy
RGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKKyAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1vbnRoRnJv
bURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKKworICAgIHJldHVybiBPcGVy
YXRpbmdEYXRlIHsgeWVhciwgbW9udGgsIG1vbnRoRGF5IH07Cit9CisKK09wZXJhdGluZ0RhdGUg
T3BlcmF0aW5nRGF0ZTo6dG9kYXkoKQoreworICAgIHJldHVybiBPcGVyYXRpbmdEYXRlOjpmcm9t
V2FsbFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKK30KKworU2Vjb25kcyBPcGVyYXRpbmdEYXRlOjpz
ZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNlY29uZHMgeyBkYXRlVG9E
YXlzRnJvbTE5NzAobV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29uZHNQZXJEYXkg
fTsKK30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09KGNvbnN0IE9wZXJhdGluZ0Rh
dGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBtX21vbnRoRGF5ID09IG90aGVyLm1fbW9u
dGhEYXkgJiYgbV9tb250aCA9PSBvdGhlci5tX21vbnRoICYmIG1feWVhciA9PSBvdGhlci5tX3ll
YXI7Cit9CisKK2Jvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0Rh
dGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDwgb3Ro
ZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKK30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRv
cjw9KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBzZWNv
bmRzU2luY2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Cit9CisKK1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUsIFdvcmtRdWV1ZSYgd29ya1F1ZXVlKQor
ICAgIDogbV9zdG9yZShzdG9yZSkKKyAgICAsIG1fd29ya1F1ZXVlKHdvcmtRdWV1ZSkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGluY2x1ZGVUb2RheUFzT3BlcmF0
aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
flJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Cit9CisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y29t
cHV0ZUltcG9ydGFuY2UoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0
aXN0aWMpCit7CisgICAgdW5zaWduZWQgaW1wb3J0YW5jZSA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6bWF4SW1wb3J0YW5jZTsKKyAgICBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzUHJl
dmFsZW50UmVzb3VyY2UpCisgICAgICAgIGltcG9ydGFuY2UgLT0gMTsKKyAgICBpZiAoIXJlc291
cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAy
OworICAgIHJldHVybiBpbXBvcnRhbmNlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sIHZh
bHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcGFyYW1ldGVy
cy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gdmFsdWU7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29sIHZhbHVlKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcGFyYW1ldGVycy5zaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCA9IHZhbHVlOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wgdmFs
dWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJz
LnNob3VsZFN1Ym1pdFRlbGVtZXRyeSA9IHZhbHVlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
aWYgKCFzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpKSB7CisgICAgICAgIGNhbGxiYWNrKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
KyAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5jbGVhcigpOworICAgIGZvciAoY29uc3QgYXV0byYg
cGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3Nl
cygpKQorICAgICAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5hZGQocGx1Z2luLT5wbHVnaW5Qcm9j
ZXNzVG9rZW4oKSk7CisjZW5kaWYKKworICAgIGF1dG8gcHJldmFsZW50UmVzb3VyY2VEb21haW5z
ID0gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOworICAgIGlmIChw
cmV2YWxlbnRSZXNvdXJjZURvbWFpbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGNhbGxiYWNrKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gcmVtb3ZlIGRhdGEgcmVjb3JkcyBmb3IgJXtwdWJs
aWN9cy4iLCBkb21haW5zVG9TdHJpbmcocHJldmFsZW50UmVzb3VyY2VEb21haW5zKS51dGY4KCku
ZGF0YSgpKTsKKyNlbmRpZgorCisgICAgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQodHJ1ZSk7
CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZhbGVudFJlc291cmNlRG9tYWlu
cyA9IGNyb3NzVGhyZWFkQ29weShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc2hvdWxk
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91
bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dv
cmtRdWV1ZS5jb3B5UmVmKCldICgpIG11dGFibGUgeworICAgICAgICBpZiAoIXdlYWtUaGlzKSB7
CisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgd2Vha1RoaXMtPm1fc3RvcmUuZGVsZXRlV2Vic2l0ZURhdGFGb3JSZWdpc3Ry
YWJsZURvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIFdURk1vdmUocHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwg
W2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhp
cyksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldKGNvbnN0IEhhc2hTZXQ8UmVnaXN0
cmFibGVEb21haW4+JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgbXV0YWJsZSB7Cisg
ICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFtkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRl
RGF0YSA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSksIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyld
ICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+aW5jcmVtZW50UmVjb3Jk
c0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoV1RGTW92ZShkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRl
RGF0YSkpOworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5zZXREYXRhUmVjb3Jkc0JlaW5nUmVt
b3ZlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlz
LT5tX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRv
bmUgcmVtb3ZpbmcgZGF0YSByZWNvcmRzLiIpOworI2VuZGlmCisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNv
dXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpCisgICAgICAgIGNsYXNzaWZ5UHJldmFsZW50
UmVzb3VyY2VzKCk7CisgICAgCisgICAgcmVtb3ZlRGF0YVJlY29yZHMoW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIoKnRoaXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICAgICAgc3luY1N0
b3JhZ2VJZk5lZWRlZCgpOworCisgICAgICAgIGlmICghbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt0aGlzLCB3ZWFrVGhpcyA9IFdURk1v
dmUod2Vha1RoaXMpXSB7CisgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIG1fc3RvcmUubm90aWZ5UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Byb2Nlc3NlZCgp
OworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBzaG91bGROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hl
bkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYo
KSwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUt
PnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRh
UmVjb3Jkc1dlcmVTY2FubmVkLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0g
KEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSkgbXV0
YWJsZSB7CisgICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdURk1v
dmUod2Vha1RoaXMpLCBkb21haW5zV2l0aFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5KGRv
bWFpbnNXaXRoV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoKSBt
dXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+Z3JhbmRmYXRoZXJEYXRhRm9y
RG9tYWlucyhkb21haW5zV2l0aFdlYnNpdGVEYXRhKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhp
cy0+bV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2FsbFRpbWU6Om5vdygpICsgd2Vh
a1RoaXMtPm1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1RpbWU7CisgICAgICAgICAgICAgICAg
d2Vha1RoaXMtPnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKTsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5sb2dUZXN0aW5nRXZlbnQoIkdyYW5k
ZmF0aGVyZWQiX3MpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZShib29sIGVuYWJsZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIGlmIChlbmFibGUpCisgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiVHVybmVk
IElUUCBEZWJ1ZyBNb2RlIG9uLiIpOworI2VuZGlmCisKKyAgICBtX2RlYnVnTW9kZUVuYWJsZWQg
PSBlbmFibGU7CisgICAgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkID0gZW5hYmxlOworCisgICAgZW5z
dXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgLy8gVGhpcyB3aWxsIGxv
ZyB0aGUgY3VycmVudCBjb29raWUgYmxvY2tpbmcgc3RhdGUuCisgICAgaWYgKGVuYWJsZSkKKyAg
ICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBtX2RlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UgPSBkb21haW47Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1fcGVuZGluZ1N0YXRpc3Rp
Y3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSArK21fbGFzdFN0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElkZW50aWZpZXI7CisgICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIobWlu
aW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKSwgc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICpt
X3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyXSB7CisgICAgICAg
IGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFtX3Bl
bmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHx8ICptX3BlbmRpbmdT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyICE9IHN0YXRpc3RpY3NQcm9jZXNz
aW5nUmVxdWVzdElkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCBoYXMg
YmVlbiBjYW5jZWxlZC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICAgICAgcHJvY2Vzc1N0YXRpc3Rp
Y3NBbmREYXRhUmVjb3JkcygpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BlbmRpbmdTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0OworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy50aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRz
IHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJU
KHNlY29uZHMgPj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5E
YXRhUmVjb3Jkc1JlbW92YWwgPSBzZWNvbmRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25kcykKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3Mp
OworCisgICAgbV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZSA9IHNlY29uZHM7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRDYWNoZU1heEFnZUNhcChTZWNv
bmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNT
RVJUKHNlY29uZHMgPj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRp
bWUgPSBzZWNvbmRzOworICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCgpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMu
Y2FjaGVNYXhBZ2VDYXBUaW1lXSAoKSB7CisgICAgICAgIHN0b3JlLT5zZXRDYWNoZU1heEFnZUNh
cChzZWNvbmRzLCBbXSB7IH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyBzZWNvbmRz
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VSVChzZWNvbmRz
ID49IDBfcyk7CisgICAgCisgICAgbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2Fw
VGltZSA9IHNlY29uZHM7CisgICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29r
aWVzQWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIEVO
QUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2xp
ZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1lXSAoKSB7CisgICAgICAgIGlmIChhdXRvKiBuZXR3b3Jr
U2Vzc2lvbiA9IHN0b3JlLT5uZXR3b3JrU2Vzc2lvbigpKQorICAgICAgICAgICAgbmV0d29ya1Nl
c3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29r
aWVzKHNlY29uZHMpOworICAgIH0pOworI2VuZGlmCit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVt
b3ZlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCisgICAgZm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdl
cjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFtX2FjdGl2
ZVBsdWdpblRva2Vucy5jb250YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuICFtX2xh
c3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+PSAo
bV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11bVRp
bWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFsdWUpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX2RhdGFSZWNvcmRzQmVpbmdS
ZW1vdmVkID0gdmFsdWU7CisgICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCisgICAg
ICAgIG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gTW9ub3RvbmljVGltZTo6bm93
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDb29raWVC
bG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlu
c1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sg
PSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNh
bGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNU
b0Jsb2NrLCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+
c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKyAg
ICAKKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyQmxvY2tpbmdTdGF0
ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucywgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZG9t
YWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zKV0geworICAgICAgICBzdG9yZS0+Y2FsbFJl
bW92ZURvbWFpbnNIYW5kbGVyKGRvbWFpbnMpOworICAgIH0pOworCisgICAgY29tcGxldGlvbkhh
bmRsZXIoKTsKK30KKworT3B0aW9uYWw8U2Vjb25kcz4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzdGF0aXN0aWNzRXBpcmF0aW9uVGltZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fcGFyYW1l
dGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKQorICAgICAgICByZXR1cm4gV2FsbFRpbWU6
Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgLSBtX3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbi52YWx1ZSgpOworICAgIAorICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUo
KSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAgICAgICAgcmV0dXJuIG1fb3BlcmF0aW5nRGF0
ZXMuZmlyc3QoKS5zZWNvbmRzU2luY2VFcG9jaCgpOworICAgIAorICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Cit9CisKK1ZlY3RvcjxPcGVyYXRpbmdEYXRlPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6Om1lcmdlT3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiBl
eGlzdGluZ0RhdGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykKK3sKKyAgICBp
ZiAoZXhpc3RpbmdEYXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKG5ld0Rh
dGVzKTsKKyAgICAKKyAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVyZ2VkRGF0ZXMoZXhpc3Rp
bmdEYXRlcy5zaXplKCkgKyBuZXdEYXRlcy5zaXplKCkpOworICAgIAorICAgIC8vIE1lcmdlIHRo
ZSB0d28gc29ydGVkIHZlY3RvcnMgb2YgZGF0ZXMuCisgICAgc3RkOjptZXJnZShleGlzdGluZ0Rh
dGVzLmJlZ2luKCksIGV4aXN0aW5nRGF0ZXMuZW5kKCksIG5ld0RhdGVzLmJlZ2luKCksIG5ld0Rh
dGVzLmVuZCgpLCBtZXJnZWREYXRlcy5iZWdpbigpKTsKKyAgICAvLyBSZW1vdmUgZHVwbGljYXRl
IGRhdGVzLgorICAgIHJlbW92ZVJlcGVhdGVkRWxlbWVudHMobWVyZ2VkRGF0ZXMpOworICAgIAor
ICAgIC8vIERyb3Agb2xkIGRhdGVzIHVudGlsIHRoZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJh
dGluZ0RhdGVzV2luZG93LgorICAgIHdoaWxlIChtZXJnZWREYXRlcy5zaXplKCkgPiBvcGVyYXRp
bmdEYXRlc1dpbmRvdykKKyAgICAgICAgbWVyZ2VkRGF0ZXMucmVtb3ZlKDApOworICAgIAorICAg
IHJldHVybiBtZXJnZWREYXRlczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdG9kYXkgPSBPcGVyYXRpbmdEYXRl
Ojp0b2RheSgpOworICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0VtcHR5KCkgJiYgdG9kYXkg
PD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxl
IChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykKKyAgICAg
ICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7CisKKyAgICBtX29wZXJhdGluZ0RhdGVzLmFw
cGVuZCh0b2RheSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNT
dGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBpZiAo
bV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpIHsKKyAgICAg
ICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSkgPCBtX29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZG9uJ3QgbWVldCB0aGUgcmVhbCBjcml0
ZXJpYSBmb3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRoZSB1c2VyIHNldHRpbmcgZm9y
IGEgdGlnaHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0aW5nKS4KKyAgICBpZiAobV9w
YXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKKyAgICAgICAgaWYgKFdhbGxU
aW1lOjpub3coKSA+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lICsgbV9wYXJhbWV0ZXJz
LnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
U3RhdGlzdGljc0V4cGlyZWQocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFj
dGlvblRpbWUpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4
U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50KQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NF
bnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BhcmFtZXRlcnMu
cHJ1bmVFbnRyaWVzRG93blRvID0gcHJ1bmVUYXJnZXRDb3VudDsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpCit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BhcmFtZXRlcnMgPSB7
IH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dUZXN0aW5nRXZl
bnQoY29uc3QgU3RyaW5nJiBldmVudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3Rv
cmUpLCBldmVudCA9IGV2ZW50Lmlzb2xhdGVkQ29weSgpXSB7CisgICAgICAgIHN0b3JlLT5sb2dU
ZXN0aW5nRXZlbnQoZXZlbnQpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9y
ZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgIHN0b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSA9IHN0
b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQoreworICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0p
OworICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlYnVn
TG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNvbnN0IFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQg
PSA1MDsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBpZiAoZG9tYWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0
ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4
dHMgZm9yOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFZlY3RvcjxS
ZWdpc3RyYWJsZURvbWFpbj4gYmF0Y2g7CisgICAgYmF0Y2gucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7CisgICAgYXV0byBiYXRjaE51
bWJlciA9IDE7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0gc3RkOjpjZWlsKGRvbWFp
bnMuc2l6ZSgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9mRG9tYWluc0luT25lTG9n
U3RhdGVtZW50KSk7CisgICAgCisgICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Cisg
ICAgICAgIGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0
ZW1lbnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNv
bnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRj
aE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICAgICAgYmF0Y2guc2hyaW5rKDApOworICAgICAgICAgICAgKytiYXRj
aE51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBiYXRjaC5hcHBlbmQoZG9tYWluKTsKKyAgICB9
CisgICAgaWYgKCFiYXRjaC5pc0VtcHR5KCkpCisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGlu
IHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMu
IiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmco
YmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYWN0aW9uKTsK
KyAgICBVTlVTRURfUEFSQU0oZG9tYWlucyk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhhNjIwYTVjNWQwMWNhYTcwM2NhZjZjYzhlMDE3NjkwZmU5ZWQwZDMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CisKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIgorI2luY2x1
ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21w
bGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKworI2lmIEhBVkUoQ09SRV9Q
UkVESUNUSU9OKQorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29j
b2EuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBLZXllZERlY29kZXI7
CitjbGFzcyBLZXllZEVuY29kZXI7CitzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKK30K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZTsKKworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7CitwdWJsaWM6CisgICAgT3Bl
cmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBzdGF0aWMgT3BlcmF0aW5nRGF0ZSBm
cm9tV2FsbFRpbWUoV2FsbFRpbWUpOworICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIHRvZGF5KCk7
CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8
PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAg
IE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1vbnRoRGF5KQorICAgICAg
ICA6IG1feWVhcih5ZWFyKQorICAgICAgICAsIG1fbW9udGgobW9udGgpCisgICAgICAgICwgbV9t
b250aERheShtb250aERheSkKKyAgICB7IH0KKworICAgIGludCBtX3llYXIgeyAwIH07CisgICAg
aW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCisgICAgaW50IG1fbW9udGhEYXkgeyAwIH07
IC8vIFsxLCAzMV0uCit9OworCisvLyBUaGlzIGlzIGFsd2F5cyBjb25zdHJ1Y3RlZCAvIHVzZWQg
LyBkZXN0cm95ZWQgb24gdGhlIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSdzIHN0YXRp
c3RpY3MgcXVldWUuCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUgOiBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3M7CisgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKKyAgICB1c2luZyBUb3BGcmFtZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOworICAgIHVzaW5nIFN1YkZyYW1lRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFi
bGVEb21haW47CisgICAgdXNpbmcgU3ViUmVzb3VyY2VEb21haW4gPSBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbjsKKyAgICB1c2luZyBSZWRpcmVjdERvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJh
YmxlRG9tYWluOworICAgIHVzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVn
aXN0cmFibGVEb21haW47CisgICAgdXNpbmcgUmVkaXJlY3RlZFRvRG9tYWluID0gV2ViQ29yZTo6
UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgTmF2aWdhdGVkRnJvbURvbWFpbiA9IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE5hdmlnYXRlZFRvRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgT3BlbmVyRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgT3BlbmVyUGFnZUlE
ID0gdWludDY0X3Q7CisgICAgdXNpbmcgUGFnZUlEID0gdWludDY0X3Q7CisgICAgdXNpbmcgRnJh
bWVJRCA9IHVpbnQ2NF90OworICAgIAorICAgIHZpcnR1YWwgflJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJikgPSAwOworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNv
bnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlu
cyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBpbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJ
Zk5lY2Vzc2FyeSgpOworICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcygp
OworCisgICAgdmlydHVhbCB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzeW5jU3RvcmFnZUlmTmVlZGVkKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHJl
cXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
JiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpID0gMDsKKyAgICB2b2lkIHJlbW92ZUFs
bFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKworICAgIHZvaWQg
Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCk7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFt
ZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21h
aW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0g
MDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWZXJ5UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3QgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5z
KEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3Jh
bmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4o
Y29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFp
biYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0
IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKKworICAgIHZv
aWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAgdm9pZCBzZXRNYXhTdGF0
aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOworICAgIHZvaWQgc2V0UHJ1
bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsKKyAgICB2b2lkIHJlc2V0
UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgIE9wdGlvbmFsPFNlY29uZHM+IHN0YXRp
c3RpY3NFcGlyYXRpb25UaW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY3VsYXRl
QW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXROb3RpZnlQYWdl
c1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCk7CisgICAgdm9pZCBz
ZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCk7CisgICAgdm9pZCBzZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKFNlY29uZHMpOworICAgIHZvaWQgc2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOworICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJpbmdUaW1l
KFNlY29uZHMpOworICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShi
b29sKTsKKyAgICBib29sIGlzRGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVi
dWdNb2RlRW5hYmxlZDsgfTsKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFzU3Rv
cmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwg
T3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4m
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURv
bWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdlSUQsIGJvb2wgcHJvbXB0RW5h
YmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNzU3RhdHVzKT4mJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwg
VG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5v
dywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0RvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGJvb2wgaXNSZWRpcmVj
dCwgYm9vbCBpc01haW5GcmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2dVc2VySW50ZXJh
Y3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvZ1N1
YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1l
RG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9nU3Vi
cmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGly
ZWN0ZWRUb0RvbWFpbiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjbGVhclVzZXJJbnRlcmFj
dGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBwcmltYXJ5
RG9tYWluLCBTZWNvbmRzKSA9IDA7CisKKyAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNz
KCk7CisKKyAgICBjb25zdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yZTsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCBtYXhJbXBvcnRhbmNlIHsgMyB9OworCisgICAgdmlydHVhbCBib29sIGlzTWVtb3J5U3RvcmUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFiYXNlU3Rv
cmUoKWNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgdW5z
aWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpOworICAgIHN0YXRpYyBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVyZ2VPcGVyYXRpbmdE
YXRlcyhjb25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIGV4aXN0aW5nRGF0ZXMsIFZlY3RvcjxP
cGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKTsKKyAgICBzdGF0aWMgdm9pZCBkZWJ1Z0xvZ0RvbWFp
bnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+JiBkb21haW5zKTsKKworICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsKKworICAgIGJvb2wgaGFz
U3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpIGNvbnN0Owor
ICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblRpbWUpIGNvbnN0OworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgcmVnaXN0
ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisgICAgdm9pZCBzY2hlZHVsZVN0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CisgICAgdmlydHVhbCBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgp
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVE
b21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJ1
bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSA9IDA7CisKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmIHN0b3JlKCkgeyByZXR1cm4gbV9zdG9yZTsgfQorICAgIFJlZjxXb3JrUXVldWU+
JiB3b3JrUXVldWUoKSB7IHJldHVybiBtX3dvcmtRdWV1ZTsgfQorI2lmIEhBVkUoQ09SRV9QUkVE
SUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EmIGNsYXNz
aWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOyB9Cisj
ZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyJiBjbGFzc2lmaWVyKCkg
eyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsgfQorI2VuZGlmCisK
KyAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7CisgICAgICAgIHNpemVfdCBwcnVuZUVudHJpZXNEb3du
VG8geyA4MDAgfTsKKyAgICAgICAgc2l6ZV90IG1heFN0YXRpc3RpY3NFbnRyaWVzIHsgMTAwMCB9
OworICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uOwor
ICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFf
aCB9OworICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGltZSB7IDI0X2ggKiA3IH07Cisg
ICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBUaW1lIHsgMjRfaCAqIDcgfTsKKyAgICAgICAg
U2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgeyAyNF9oICogNyB9OworICAgICAg
ICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxz
ZSB9OworICAgICAgICBib29sIHNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29y
ZHNSZW1vdmFsIHsgdHJ1ZSB9OworICAgICAgICBib29sIHNob3VsZFN1Ym1pdFRlbGVtZXRyeSB7
IHRydWUgfTsKKyAgICB9OworICAgIGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIG9w
ZXJhdGluZ0RhdGVzKCkgeyByZXR1cm4gbV9vcGVyYXRpbmdEYXRlczsgfQorICAgIGNvbnN0IFZl
Y3RvcjxPcGVyYXRpbmdEYXRlPiYgb3BlcmF0aW5nRGF0ZXMoKSBjb25zdCB7IHJldHVybiBtX29w
ZXJhdGluZ0RhdGVzOyB9CisgICAgV2FsbFRpbWUmIGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3Rh
bXAoKSB7IHJldHVybiBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7IH0KKyAgICBjb25z
dCBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQorICAgIHZvaWQgY2xlYXJFbmRPZkdy
YW5kZmF0aGVyaW5nVGltZVN0YW1wKCkgeyBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PSB7IH07IH0KKyAgICBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZTsgfQorICAgIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlOyB9
CisgICAgYm9vbCBkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0xv
Z2dpbmdFbmFibGVkOyB9OworICAgIGJvb2wgZGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfQorICAgIGJvb2wgc3RvcmFnZUFjY2Vzc1Byb21wdHNF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQ7IH0K
KworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxs
c0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OworCitwcml2YXRlOgorICAgIHZvaWQgc2V0U3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX3N0b3JhZ2VBY2Nlc3NQ
cm9tcHRzRW5hYmxlZCAgPSBlbmFibGVkOyB9CisgICAgYm9vbCBzaG91bGRSZW1vdmVEYXRhUmVj
b3JkcygpIGNvbnN0OworICAgIHZvaWQgc2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1fZGVidWdMb2dnaW5nRW5hYmxlZCAgPSBlbmFibGVkOyB9CisgICAgdm9pZCBzZXRE
YXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sKTsKKyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRz
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZXRDYWNoZU1heEFnZUNh
cChTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdm9pZCBz
ZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0ZUNs
aWVudFNpZGVDb29raWVzQWdlQ2FwKCk7CisKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmIG1fc3RvcmU7CisgICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisjaWYgSEFW
RShDT1JFX1BSRURJQ1RJT04pCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJD
b2NvYSBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOworI2Vsc2UKKyAgICBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllciBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFz
c2lmaWVyOworI2VuZGlmCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgSGFz
aFNldDx1aW50NjRfdD4gbV9hY3RpdmVQbHVnaW5Ub2tlbnM7CisjZW5kaWYKKyAgICBQYXJhbWV0
ZXJzIG1fcGFyYW1ldGVyczsKKyAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdE
YXRlczsKKyAgICBXYWxsVGltZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CisgICAg
UmVnaXN0cmFibGVEb21haW4gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlOworICAgIE1v
bm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQ7CisgICAgdWludDY0
X3QgbV9sYXN0U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAgfTsKKyAg
ICBPcHRpb25hbDx1aW50NjRfdD4gbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWRlbnRpZmllcjsKKyAgICBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGljUHJl
dmFsZW50UmVzb3VyY2UgeyBVUkwgeyBVUkwoKSwgImh0dHBzOi8vM3JkcGFydHl0ZXN0d2Via2l0
Lm9yZyJfcyB9IH07CisgICAgYm9vbCBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RvcmFn
ZUFjY2Vzc1Byb21wdHNFbmFibGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1t
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY5ZjdlOGYwYTIwZGFmZWE5YWIyOWU2MDcwNzhlZjE1N2ZiMmJiZGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0KQEAgLTAsMCArMSw4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuaCIKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1Mp
CisKKyNpbXBvcnQgPFdlYkNvcmUvUmVnaXN0cmFibGVEb21haW4uaD4KKyNpbXBvcnQgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
Z2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNl
X3QgaW5pdE9uY2U7CisKKyAgICBkaXNwYXRjaF9vbmNlKCZpbml0T25jZSwgXnsKKyAgICAgICAg
U2Vjb25kcyB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUaW1l
VG9MaXZlVXNlckludGVyYWN0aW9uIl0pOworICAgICAgICBpZiAodGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbiA+IDBfcyAmJiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uIDw9IDI0X2ggKiAzMCkK
KyAgICAgICAgICAgIHNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24odGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbik7CisKKyAgICAgICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91Ymxl
Rm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbCJdKTsKKyAgICAgICAgaWYgKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRz
UmVtb3ZhbCA+IDBfcyAmJiBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPCAx
X2gpCisgICAgICAgICAgICBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
bWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKKworICAgICAgICBTZWNvbmRz
IGdyYW5kZmF0aGVyaW5nVGltZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1l
Il0pOworICAgICAgICBpZiAoZ3JhbmRmYXRoZXJpbmdUaW1lID4gMF9zICYmIGdyYW5kZmF0aGVy
aW5nVGltZSA8PSAyNF9oICogNykKKyAgICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5nVGltZShn
cmFuZGZhdGhlcmluZ1RpbWUpOworCisgICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
ZWJ1Z01vZGUoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktl
eTpAIkl0cERlYnVnTW9kZSJdKTsKKyAgICAgICAgYXV0byogZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSA9IFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0Zv
cktleTpAIkl0cE1hbnVhbFByZXZhbGVudFJlc291cmNlIl07CisgICAgICAgIGlmIChkZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlKSB7CisgICAgICAgICAgICBVUkwgdXJsIHsgVVJMKCksIGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgfTsKKyAgICAgICAgICAgIGlmICghdXJsLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImh0dHA6Ly8iKTsKKyAgICAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICAgICAg
ICAgICAgICB1cmwgPSB7IFVSTCgpLCBidWlsZGVyLnRvU3RyaW5nKCkgfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKFJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0pOwor
ICAgICAgICB9CisKKyAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJl
c291cmNlcyhbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JL
ZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiXSk7CisgICAgICAgIGlm
IChjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyA+IDBfcyAmJiBjYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyA8PSAyNF9oICogMzY1KQorICAgICAgICAgICAgc2V0
Q2FjaGVNYXhBZ2VDYXAoY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOworICAg
ICAgICAKKyAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcChbW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAiXSk7CisgICAgICAgIGlmIChjbGllbnRT
aWRlQ29va2llc0FnZUNhcCA+IDBfcyAmJiBjbGllbnRTaWRlQ29va2llc0FnZUNhcCA8PSAyNF9o
ICogMzY1KQorICAgICAgICAgICAgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoY2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXApOworICAgIH0pOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAppbmRleCA2NTVkMTFlOWI1
YzZjYWRhN2M5YjUyNTM2OWM0ZmU1Y2E4NDJmZGYwLi5jYmVkNGE5NjdlZjljMDA2MTYxNzk1Zjc5
ZjkyMmEyMDFjYWJmYjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisj
aW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIKICNpbmNsdWRlICJTaG91bGRHcmFu
ZGZhdGhlclN0YXRpc3RpY3MuaCIKQEAgLTQ4LDYgKzQ5LDkgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3Jh
Z2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVt
ZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0NhbGxiYWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0
Zi9Dcm9zc1RocmVhZENvcGllci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpA
QCAtODYsOCArOTAsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0
Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChibwogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAg
aWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE5vdGlmeVBh
Z2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwogICAgIH0pOwogfQogCkBAIC05
Niw5ICsxMDAsOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChibwogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE5vdGlm
eVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOwotICAgICAgICAKKyAgICAg
ICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUt
PnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOworCiAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwog
fQpAQCAtMTA4LDggKzExMiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRT
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7Cisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2
YWx1ZSk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgfSk7CkBAIC0xMjAsOCArMTI0LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5z
ZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0U2hvdWxkU3VibWl0VGVs
ZW1ldHJ5KHZhbHVlKTsKICAgICB9KTsKIH0KIApAQCAtMTQxLDEzICsxNDUsMjIgQEAgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUo
TmV0d29ya1Nlc3Npb24mIG4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeS5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBt
X21lbW9yeVN0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSk7Ci0gICAgICAgIG1fcGVyc2lzdGVu
dFN0b3JhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0
ZW50U3RvcmFnZT4oKm1fbWVtb3J5U3RvcmUsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsKKyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkuaVRQRGF0YWJhc2VFbmFibGVkKCkpIHsKKyAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KTsKKworICAgICAgICAgICAgYXV0byBtZW1vcnlTdG9yZSA9IHN0
ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqdGhpcywg
bV9zdGF0aXN0aWNzUXVldWUpOworICAgICAgICAgICAgYXV0byBwZXJzaXN0ZW50U3RvcmUgPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4o
Km1lbW9yeVN0b3JlLCBtX3N0YXRpc3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rp
cmVjdG9yeSk7CisKKyAgICAgICAgICAgIGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUuZ2V0KCkpLnBvcHVsYXRlRnJvbU1lbW9y
eVN0b3JlKCptZW1vcnlTdG9yZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlPigqdGhpcywgbV9zdGF0aXN0aWNzUXVldWUpOworICAgICAgICAgICAgbV9wZXJz
aXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Bl
cnNpc3RlbnRTdG9yYWdlPihkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU+KCptX3N0YXRpc3RpY3NTdG9yZSksIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGlyZWN0b3J5KTsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FKDE5MzI5
Nyk6IFRoaXMgc2hvdWxkIGJlIHJldmlzZWQgYWZ0ZXIgdGhlIFVJUHJvY2VzcyB2ZXJzaW9uIGdv
ZXMgYXdheS4KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3Mo
KTsKKyAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7
CiAgICAgfSk7Ci0gICAgCisKICAgICBtX2RhaWx5VGFza3NUaW1lci5zdGFydFJlcGVhdGluZygy
NF9oKTsKIH0KIApAQCAtMTc2LDcgKzE4OSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKQogewogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBpZiAoIW1fcGVyc2lzdGVudFN0b3JhZ2UgJiYg
IW1fbWVtb3J5U3RvcmUpCisgICAgaWYgKCFtX3BlcnNpc3RlbnRTdG9yYWdlICYmICFtX3N0YXRp
c3RpY3NTdG9yZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGRlc3Ry
b3kgdGhlIHBlcnNpc3RlbnQgc3RvcmUgb24gdGhlIGJhY2tncm91bmQgcXVldWUgYW5kIHdhaXQg
Zm9yIGl0IHRvIGRpZQpAQCAtMTg2LDcgKzE5OSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpmbHVzaEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUoKQogICAgIEJpbmFy
eVNlbWFwaG9yZSBzZW1hcGhvcmU7CiAgICAgbV9zdGF0aXN0aWNzUXVldWUtPmRpc3BhdGNoKFsm
c2VtYXBob3JlLCB0aGlzXSB7CiAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBudWxscHRy
OwotICAgICAgICBtX21lbW9yeVN0b3JlID0gbnVsbHB0cjsKKyAgICAgICAgbV9zdGF0aXN0aWNz
U3RvcmUgPSBudWxscHRyOwogICAgICAgICBzZW1hcGhvcmUuc2lnbmFsKCk7CiAgICAgfSk7CiAg
ICAgc2VtYXBob3JlLndhaXQoKTsKQEAgLTE5Nyw4ICsyMTAsOCBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShi
b29sIHZhbAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhb
dGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSh2YWx1ZSk7
CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlLT5zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKICAgICAg
ICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CkBAIC0yMDgsOCArMjIxLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2kKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBk
b21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUo
ZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9z
dGF0aXN0aWNzU3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGRvbWFpbik7
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQpAQCAtMjE5LDggKzIzMiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1Byb2Nlc3NpbmcoCiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5w
cm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgICAgIGlmIChtX3N0YXRpc3Rp
Y3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5wcm9jZXNzU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzKCk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMjM4LDE3ICsyNTEsMTkgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc291cmNlTG9hZFN0YXRpc3RpY3NVcGRhdGVk
KFZlY3RvcjxXZWJDb3IKICAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFJlc291cmNlTG9hZFN0YXRp
c3RpY3Mgb25seSBjb250YWlucyBzdHJpbmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3Ro
ZXIgdGhyZWFkcyBhcyBsb25nCiAgICAgLy8gYXMgbm9ib2R5IG9uIHRoaXMgdGhyZWFkIGhvbGRz
IGEgcmVmZXJlbmNlIHRvIHRob3NlIHN0cmluZ3MuCiAgICAgcG9zdFRhc2soW3RoaXMsIG9yaWdp
bnMgPSBXVEZNb3ZlKG9yaWdpbnMpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5
U3RvcmUpCisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUgfHwgIWlzPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5tZXJnZVN0YXRpc3RpY3MoV1RGTW92
ZShvcmlnaW5zKSk7CisgICAgICAgIGF1dG8mIG1lbW9yeVN0b3JlID0gZG93bmNhc3Q8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpOworICAgIAor
ICAgICAgICBtZW1vcnlTdG9yZS5tZXJnZVN0YXRpc3RpY3MoV1RGTW92ZShvcmlnaW5zKSk7CiAK
ICAgICAgICAgLy8gV2UgY2FuIGNhbmNlbCBhbnkgcGVuZGluZyByZXF1ZXN0IHRvIHByb2Nlc3Mg
c3RhdGlzdGljcyBzaW5jZSB3ZSdyZSBkb2luZyBpdCBzeW5jaHJvbm91c2x5IGJlbG93LgotICAg
ICAgICBtX21lbW9yeVN0b3JlLT5jYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1
ZXN0KCk7CisgICAgICAgIG1lbW9yeVN0b3JlLmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vz
c2luZ1JlcXVlc3QoKTsKIAogICAgICAgICAvLyBGaXJlIGJlZm9yZSBwcm9jZXNzaW5nIHN0YXRp
c3RpY3MgdG8gcHJvcGFnYXRlIHVzZXIgaW50ZXJhY3Rpb24gYXMgZmFzdCBhcyBwb3NzaWJsZSB0
byB0aGUgbmV0d29yayBwcm9jZXNzLgotICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29r
aWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnByb2Nlc3NTdGF0
aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICAgICAgbWVtb3J5U3RvcmUudXBkYXRlQ29va2ll
QmxvY2tpbmcoW10oKSB7IH0pOworICAgICAgICBtZW1vcnlTdG9yZS5wcm9jZXNzU3RhdGlzdGlj
c0FuZERhdGFSZWNvcmRzKCk7CiAgICAgfSk7CiB9CiAKQEAgLTI1OCwxNyArMjczLDIwIEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiBzCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xh
dGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgp
LCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAg
ICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5
U3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBm
cmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgewotICAgICAgICAgICAgcG9z
dFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgaGFzU3RvcmFnZUFjY2Vzc10oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihoYXNTdG9yYWdlQWNjZXNzKTsKKworICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5oYXNTdG9yYWdlQWNjZXNz
KHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNTdG9yYWdl
QWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBoYXNTdG9yYWdlQWNjZXNz
XSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYXNT
dG9yYWdlQWNjZXNzKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKKyAgICAgICAgfQogICAgIH0pOwogfQogCkBAIC0zMjUsMTggKzM0MywyMCBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3Mo
Y29uc3QgUmVnaXN0cmFibGVEb21haQogICAgIH0KIAogICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJG
cmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFp
biA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHByb21w
dEVuYWJsZWQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAo
IW1fc3RhdGlzdGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OkNhbm5v
dFJlcXVlc3RBY2Nlc3MpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhX
VEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQu
dmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3RvcmFnZUFjY2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFi
bGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhdHVzXSgpIG11dGFibGUgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NT
dG9yZSkgeworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNj
ZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJh
bWVJRC52YWx1ZSgpLCBwYWdlSUQsIHByb21wdEVuYWJsZWQsIFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTdG9yYWdlQWNjZXNzU3RhdHVzIHN0YXR1cykg
bXV0YWJsZSB7CisgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3RhdHVzXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0dXMpOworICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICB9CiAgICAgfSk7
CiB9CiAKQEAgLTM0OCw4ICszNjgsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihSZWdpc3RyYWJsZQogICAgIC8v
IGNvbWluZyBmcm9tIElQQy4gU3RyaW5ncyB3aGljaCBhcmUgc2FmZSB0byBtb3ZlIHRvIG90aGVy
IHRocmVhZHMgYXMgbG9uZyBhcyBub2JvZHkgb24gdGhpcyB0aHJlYWQgaG9sZHMgYSByZWZlcmVu
Y2UKICAgICAvLyB0byB0aG9zZSBzdHJpbmdzLgogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vz
cyksIG9wZW5lclBhZ2VJRCwgb3BlbmVyRG9tYWluID0gV1RGTW92ZShvcGVuZXJEb21haW4pXSgp
IG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92ZShkb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyRG9tYWlu
KSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlz
dGljc1N0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFdURk1vdmUoZG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFnZUlELCBXVEZNb3ZlKG9wZW5lckRvbWFp
bikpOwogICAgIH0pOwogfQogCkBAIC0zNTcsMTggKzM3NywyMCBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJgogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2so
W3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRv
cEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBh
Z2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUp
IHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRh
c2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IG1fbWVtb3J5U3RvcmUtPmdyYW50U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lRG9tYWlu
KSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21w
dGVkTm93LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
Ym9vbCB3YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVw
bHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHdhc0dy
YW50ZWRBY2Nlc3NdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIod2FzR3JhbnRlZEFjY2Vzcyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgewor
ICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmdyYW50U3RvcmFnZUFjY2VzcyhXVEZNb3Zl
KHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQsIHBhZ2VJ
RCwgdXNlcldhc1Byb21wdGVkTm93LCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oYm9vbCB3YXNHcmFudGVkQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSgpIG11dGFibGUgeworICAgICAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsKKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0p
OwogfQogCkBAIC0zOTcsOSArNDE5LDkgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXNdIHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0
b3JlKQorICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX21lbW9yeVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOworICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB9
KTsKIH0KIApAQCAtNDIzLDExICs0NDUsMTAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKCkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXNdIHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmluY2x1ZGVU
b2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUt
PmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5pbmNsdWRlVG9kYXlBc09w
ZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUt
PmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpOworICAgICAgICB9CiAgICAgfSk7CiB9CiAK
QEAgLTQzNiw4ICs0NTcsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c3VibWl0VGVsZW1ldHJ5KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJgogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
bGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KCptX21lbW9yeVN0b3JlKTsKKyAgICAgICAgaWYg
KG1fc3RhdGlzdGljc1N0b3JlICYmIGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkKKyAgICAgICAgICAgIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdChkb3duY2FzdDxSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpOwogCiAgICAgICAgIHBv
c3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNDc2
LDI3ICs0OTcsMjYgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ0Zy
YW1lTmF2aWdhdGlvbihjb25zdCBXZWJGcmFtZVByb3h5JiBmcmEKIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBib29sIGlzUmVkaXJl
Y3QsIGJvb2wgaXNNYWluRnJhbWUpCiB7CiAgICAgcG9zdFRhc2soW3RoaXMsIHRhcmdldERvbWFp
biA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgc291cmNlRG9tYWluID0gc291cmNlRG9tYWluLmlzb2xh
dGVkQ29weSgpLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZV0gewotCi0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nRnJhbWVOYXZpZ2F0aW9u
KHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIHNvdXJjZURvbWFpbiwgaXNSZWRpcmVjdCwg
aXNNYWluRnJhbWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAg
ICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nRnJhbWVOYXZpZ2F0aW9uKHRhcmdldERvbWFpbiwgdG9w
RnJhbWVEb21haW4sIHNvdXJjZURvbWFpbiwgaXNSZWRpcmVjdCwgaXNNYWluRnJhbWUpOwogICAg
IH0pOwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nV2ViU29j
a2V0TG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9zdFRh
c2soW3RoaXMsIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9w
RnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgbGFzdFNlZW4sIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+
bG9nU3VicmVzb3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RT
ZWVuKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0
aXN0aWNzU3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21haW4sIHRvcEZyYW1l
RG9tYWluLCBsYXN0U2Vlbik7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBX
YWxsVGltZSBsYXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQordm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291
cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9zdFRhc2so
W3RoaXMsIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJh
bWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgbGFzdFNlZW4sIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9n
U3VicmVzb3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVu
KTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0
aWNzU3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21haW4sIHRvcEZyYW1lRG9t
YWluLCBsYXN0U2Vlbik7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC01MDUsOSArNTI1LDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdpc3Ry
YWJsZURvbWEKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNv
dXJjZVJlZGlyZWN0KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgc291cmNlRG9t
YWluID0gc291cmNlRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0YXJnZXREb21haW4gPSB0YXJnZXRE
b21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nU3VicmVzb3VyY2VSZWRpcmVjdChzb3VyY2VEb21h
aW4sIHRhcmdldERvbWFpbik7Ci0KKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmxvZ1N1YnJlc291cmNlUmVkaXJlY3Qoc291cmNl
RG9tYWluLCB0YXJnZXREb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTUxNyw4ICs1MzYsOCBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBw
b3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1VzZXJJ
bnRlcmFjdGlvbihkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAg
ICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbik7CiAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0p
OwogfQpAQCAtNTI4LDggKzU0Nyw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpCiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWlu
ID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmNsZWFyVXNlckludGVyYWN0aW9uKGRvbWFpbik7
CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlLT5jbGVhclVzZXJJbnRlcmFjdGlvbihkb21haW4pOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTUzNyw3ICs1
NTYsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4sIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaGFk
VXNlckludGVyYWN0aW9uID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmhhc0hhZFVz
ZXJJbnRlcmFjdGlvbihkb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaGFkVXNlckludGVy
YWN0aW9uID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+aGFzSGFkVXNl
ckludGVyYWN0aW9uKGRvbWFpbikgOiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaGFk
VXNlckludGVyYWN0aW9uLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFkVXNl
ckludGVyYWN0aW9uKTsKICAgICAgICAgfSk7CkBAIC01NDksOCArNTY4LDggQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBkb21haW4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAg
IHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIHNlY29uZHMs
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+c2V0TGFzdFNlZW4oZG9tYWluLCBzZWNvbmRzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGlj
c1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldExhc3RTZWVuKGRvbWFp
biwgc2Vjb25kcyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgIH0pOwogfQpAQCAtNTYwLDggKzU3OSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJs
ZURvbWFpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0
aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJldmFsZW50UmVzb3Vy
Y2UoZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CiAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpA
QCAtNTcxLDggKzU5MCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVECiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4u
aXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAg
ICAgbV9tZW1vcnlTdG9yZS0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CisgICAg
ICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3Jl
LT5zZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01ODIsNyArNjAx
LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmR1bXBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzKENvbXBsZXRpb25IYW5kbGUKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQgPSBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3Mo
KSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBtX3N0YXRpc3RpY3NT
dG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIDog
ZW1wdHlTdHJpbmcoKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbcmVzdWx0ID0gcmVzdWx0Lmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsK
ICAgICAgICAgfSk7CkBAIC01OTQsNyArNjEzLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4K
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlz
LCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNQcmV2
YWxlbnRSZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1ByZXZhbGVu
dFJlc291cmNlKGRvbWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1ByZXZhbGVudFJlc291
cmNlID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNQcmV2YWxlbnRS
ZXNvdXJjZShkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUHJldmFs
ZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1ByZXZhbGVu
dFJlc291cmNlKTsKICAgICAgICAgfSk7CkBAIC02MDYsNyArNjI1LDcgQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG8KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBv
c3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlT
dG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOworICAgICAgICBi
b29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRp
c3RpY3NTdG9yZS0+aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOwogICAg
ICAgICBwb3N0VGFza1JlcGx5KFtpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzVmVyeVByZXZhbGVudFJlc291cmNlKTsKICAgICAgICAg
fSk7CkBAIC02MTgsNyArNjM3LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBSZWdpc3QKICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YnJlc291cmNl
RG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWlu
ID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNSZWdp
c3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUt
PmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihzdWJyZXNvdXJjZURvbWFpbiwgdG9wRnJh
bWVEb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNSZWdpc3Rl
cmVkQXNTdWJyZXNvdXJjZVVuZGVyKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFpbikK
KyAgICAgICAgICAgIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlz
UmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcik7CiAgICAgICAgIH0pOwpAQCAtNjMwLDcgKzY1
MCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRB
c1N1YkZyYW1lVW5kZXIoY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9t
YWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xh
dGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciA9
IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5k
ZXIoc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29s
IGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlciA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0
aXN0aWNzU3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZURvbWFpbiwg
dG9wRnJhbWVEb21haW4pCisgICAgICAgICAgICA6IGZhbHNlOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFtpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIpOwogICAgICAgICB9KTsKQEAg
LTY0Miw3ICs2NjMsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNS
ZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZ2lzdHJhYgogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluUmVkaXJlY3RlZEZy
b20gPSBkb21haW5SZWRpcmVjdGVkRnJvbS5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3Rl
ZFRvID0gZG9tYWluUmVkaXJlY3RlZFRvLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBib29s
IGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0
b3JlLT5pc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oZG9tYWluUmVkaXJlY3RlZEZyb20sIGRv
bWFpblJlZGlyZWN0ZWRUbykgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8gPSBtX3N0YXRpc3RpY3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1Jl
Z2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oZG9tYWluUmVkaXJlY3RlZEZyb20sIGRvbWFpblJlZGly
ZWN0ZWRUbykKKyAgICAgICAgICAgIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lz
UmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyk7CiAgICAgICAgIH0pOwpAQCAtNjU0LDgg
KzY3Niw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZh
bGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tCiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xh
dGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPmNsZWFyUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKKyAgICAgICAgaWYg
KG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmNsZWFy
UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC02NjUsOCArNjg3LDggQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIGQKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgdmFsdWUs
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+c2V0R3JhbmRmYXRoZXJlZChkb21haW4sIHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlz
dGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldEdyYW5kZmF0aGVy
ZWQoZG9tYWluLCB2YWx1ZSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNjc2LDcgKzY5OCw4IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc0dyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIGRvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RU
YXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJv
b2wgaXNHcmFuZEZhdGhlcmVkID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzR3Jh
bmRmYXRoZXJlZChkb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNHcmFuZEZhdGhlcmVk
ID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNHcmFuZGZhdGhlcmVk
KGRvbWFpbikKKyAgICAgICAgICAgIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lz
R3JhbmRGYXRoZXJlZCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzR3JhbmRG
YXRoZXJlZCk7CiAgICAgICAgIH0pOwpAQCAtNjg4LDggKzcxMSw4IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29u
c3QgUmVnaXN0CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0
VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJh
bWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWlu
KTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0
aWNzU3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihzdWJGcmFtZURvbWFpbiwg
dG9wRnJhbWVEb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTY5OSw4ICs3MjIsOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
KGNvbnN0IFJlZwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9z
dFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKHN1YnJlc291cmNlRG9tYWluLCB0
b3BGcmFtZURvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAg
ICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4o
c3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC03MTAsOCArNzMz
LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3QKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdWJyZXNvdXJjZURvbWFpbiA9IHN1YnJlc291cmNlRG9t
YWluLmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVjdGVk
VG8uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dFRvKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8pOworICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRpcmVj
dGVkVG8pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICB9KTsKIH0KQEAgLTcyMSw4ICs3NDQsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVn
aQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3Ro
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN1YnJl
c291cmNlRG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRvbWFpblJl
ZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVkaXJlY3RlZEZyb20uaXNvbGF0ZWRDb3B5KCldKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oc3VicmVzb3VyY2VEb21haW4s
IGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQor
ICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRpcmVjdGVkRnJvbSk7CiAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpA
QCAtNzMyLDggKzc1NSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgdG9wRnJhbWVEb21haW4gPSB0b3BG
cmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3RlZFRvID0gZG9tYWluUmVk
aXJlY3RlZFRvLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1v
cnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyh0b3BGcmFtZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZFRvKTsKKyAgICAgICAgaWYg
KG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RUbyh0b3BGcmFtZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZFRv
KTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAg
ICAgfSk7CiB9CkBAIC03NDMsOCArNzY2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2lzdHIKICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCB0b3BGcmFtZURv
bWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkRnJv
bSA9IGRvbWFpblJlZGlyZWN0ZWRGcm9tLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVk
RnJvbSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3Rh
dGlzdGljc1N0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFtZURvbWFp
biwgZG9tYWluUmVkaXJlY3RlZEZyb20pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTc1NSwxMyArNzc4LDE3IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlKENvbXBsZXRpb25IYW5kCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAg
ICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisK
KyAgICAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNy
ZWF0ZShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkg
bXV0YWJsZSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tp
bmcoW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKCkg
eyB9KTsKICAgICB9KTsKIH0KIApAQCAtNzcwLDE0ICs3OTcsMTcgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JEb21h
aW5zKGNvbnMKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4g
U2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkLgogICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbnNUb0Jsb2NrID0g
Y3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX21lbW9y
eVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+dXBkYXRlQ29va2ll
QmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAg
fSk7CisKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0
aXN0aWNzU3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhkb21haW5zVG9CbG9j
aywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldKCkg
eyB9KTsKICAgICB9KTsKIH0KIApAQCAtNzg2LDE0ICs4MTYsMTcgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlu
cyhjb25zdAogICAgIC8vIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBT
aG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWlucyA9IGNyb3NzVGhy
ZWFkQ29weShkb21haW5zKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAg
ICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlu
cyhkb21haW5zLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFj
a0FnZ3JlZ2F0b3I6OmNyZWF0ZShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgfSk7CisKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmNsZWFyQmxvY2tp
bmdTdGF0ZUZvckRvbWFpbnMoZG9tYWlucywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNr
QWdncmVnYXRvci5jb3B5UmVmKCldKCkgeyB9KTsKICAgICB9KTsKIH0KIApAQCAtODA0LDIyICs4
MzcsMjcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xl
YXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQoU2hvdWxkR3IKICAgICAgICAgaWYgKG1fcGVyc2lzdGVu
dFN0b3JhZ2UpCiAgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5jbGVhcigpOwogCi0g
ICAgICAgIENvbXBsZXRpb25IYW5kbGVyQ2FsbGluZ1Njb3BlIGNvbXBsZXRpb25IYW5kbGVyQ2Fs
bGVyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgeworICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBp
ZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMp
CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVy
c2lzdGVudCBCZWZvcmUgYmVpbmcgY2xlYXJlZCwgbV9zdGF0aXN0aWNzU3RvcmUgaXMgbnVsbCB3
aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOworCisgICAgICAgICAgICBwb3N0VGFz
a1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tB
Z2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGlmIChtX21lbW9y
eVN0b3JlKSB7Ci0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhcihbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBzaG91bGRHcmFuZGZhdGhlciwgY29t
cGxldGlvbkhhbmRsZXJDYWxsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyKV0g
KCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgeworICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVj
dGVkVGhpcy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjYWxsYmFja0FnZ3JlZ2F0b3Ig
PSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
ICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNz
OjpZZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0
ZURhdGEoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9z
dGF0aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbY2FsbGJhY2tB
Z2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0FnZ3JlZ2F0b3IpXSgpIG11dGFibGUgeyB9KTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBBZnRlciBiZWluZyBjbGVh
cmVkLCBtX21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0
YS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0
YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9zdGF0aXN0aWNzU3Rv
cmUgaXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVz
KQotICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQgQmVmb3JlIGJlaW5nIGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUgaXMgbnVsbCB3aGVu
IHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOwogICAgICAgICB9CiAgICAgfSk7CiB9CkBA
IC04MzcsOCArODc1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmQKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAg
ICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFRp
bWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7CisgICAgICAgIGlmIChtX3N0YXRpc3Rp
Y3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRUaW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uKHNlY29uZHMpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTg0Nyw4ICs4ODUsOCBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKFNlYwogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
cG9zdFRhc2soW3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbChzZWNvbmRzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNv
cmRzUmVtb3ZhbChzZWNvbmRzKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTg1OCw4ICs4OTYsOCBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMg
c2Vjb25kcywgQ29tcAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9z
dFRhc2soW3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNz
U3RvcmUtPnNldEdyYW5kZmF0aGVyaW5nVGltZShzZWNvbmRzKTsKIAogICAgICAgICBwb3N0VGFz
a1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTkwMyw4ICs5
NDEsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlz
dGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeQogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgcG9zdFRhc2soW3RoaXMsIG1heGltdW1FbnRyeUNvdW50LCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRN
YXhTdGF0aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7CisgICAgICAgIGlmIChtX3N0
YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRNYXhTdGF0
aXN0aWNzRW50cmllcyhtYXhpbXVtRW50cnlDb3VudCk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC05MTUsOCArOTUzLDgg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBydW5lRW50cmllc0Rv
d25UbyhzaXplX3QgcHJ1bmVUYXJnZXRDb3UKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHBydW5lVGFyZ2V0Q291bnQsIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBp
ZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFBydW5lRW50
cmllc0Rvd25UbyhwcnVuZVRhcmdldENvdW50KTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0
b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFBydW5lRW50cmllc0Rvd25U
byhwcnVuZVRhcmdldENvdW50KTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTkyNyw4ICs5NjUsOCBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVz
KENvbXBsZXRpb25IYQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0
VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAgICAgICAg
aWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHko
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCmluZGV4IDA2MzQzODVjMTBiMzI0MTg0MTI4OGZm
ODQxOTFkOTI4MjU5OGI4ZDEuLjBhMWEzMDNjZGY4NjUzMjZkMjgxYzkxNWJiZjQyZGZkYzVmN2Vl
NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAg
LTUyLDcgKzUyLDcgQEAgZW51bSBjbGFzcyBTaG91bGRTYW1wbGUgOiBib29sOwogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uOwotY2xhc3MgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOworY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOwog
Y2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOwogY2xhc3MgV2Vi
RnJhbWVQcm94eTsKIGNsYXNzIFdlYlByb2Nlc3NQcm94eTsKQEAgLTE4OSw3ICsxODksNyBAQCBw
cml2YXRlOgogCiAgICAgV2Vha1B0cjxOZXR3b3JrU2Vzc2lvbj4gbV9uZXR3b3JrU2Vzc2lvbjsK
ICAgICBSZWY8V29ya1F1ZXVlPiBtX3N0YXRpc3RpY3NRdWV1ZTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPiBtX21lbW9yeVN0b3JlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fc3RhdGlzdGlj
c1N0b3JlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lz
dGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVudFN0b3JhZ2U7CiAKICAgICBSdW5Mb29wOjpUaW1lcjxX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU+IG1fZGFpbHlUYXNrc1RpbWVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA1NWNi
YWI4NjRmZWViOWNjZTgzNGI0ZmFkZDljNDAwMjNiNGI5MjIwLi5iMjU1OGVmMWMzZDdjOTFkMzlh
NjgyOTYzM2ZkM2E3MzdiYTRhYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJl
cXVlc3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2NoZW1lUmVnaXN0cnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2lu
RGF0YS5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1zLmg+CkBAIC0zMjksNiArMzMwLDggQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYKICAgICB9CiAjZW5kaWYKIAorICAgIFdlYkNvcmU6OlJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0SVRQRGF0YWJhc2VFbmFi
bGVkKHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpOworCiAgICAgYXV0byogZGVm
YXVsdFNlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbihQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Np
b25JRCgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IHBhcmFtZXRlcnMuZGVmYXVs
dERhdGFTdG9yZVBhcmFtZXRlcnMucGVuZGluZ0Nvb2tpZXMpCiAgICAgICAgIGRlZmF1bHRTZXNz
aW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zZXRDb29raWUoY29va2llKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggYzZkZjA4ZTlmYjc3NjZmNzcwYWZhZGVmMWFh
N2YyMTI5NDlkMWY1NS4uMDg3MTUwYTFkNTIxYTUyNGVjYmQ4YjVkOWExYjQ4NjNhZjE2YTUxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTkzLDYgKzkzLDcgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQQzo6RW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCiAgICAgZW5jb2RlciA8
PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgdXJsU2NoZW1lc1NlcnZpY2VXb3Jr
ZXJzQ2FuSGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0
aW9uRGVsYXk7CiAjZW5kaWYKKyAgICBlbmNvZGVyIDw8IHNob3VsZEVuYWJsZUlUUERhdGFiYXNl
OwogfQogCiBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcmVz
dWx0KQpAQCAtMjE3LDYgKzIxOCw5IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICNlbmRpZgogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
c2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCmluZGV4IDJmZDNi
ZTlmZGVkOTgwYjc1NzNjZTNiNTE2YjA3YTk2ZmFkYWY3M2IuLmZjOTAwYzJlZDdmMGNlZmIxODI5
MGM0MGY4MDM1Y2NmZTVkOTc4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAg
LTExMSw2ICsxMTEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMg
ewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZTsK
ICAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXkgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgYm9vbCBzaG91bGRFbmFibGVJVFBEYXRhYmFzZSB7
IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
Zmllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCmluZGV4IGYxZWE3OTI5ZDUzMDdmMDVkYzA2ODBmNjQ3
NTRhNjlmODNlOTg1NmIuLmI0NDkyYTRkMjQ5ZmM5N2RjYThhYTNkMzIzZDM1Mjc5YmFmNmQ3ZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9j
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw3ICs0Nywx
MiBAQCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZhbAogICAgIGF1dG8gc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUby5zaXplKCk7CiAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLnNpemUo
KTsKICAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHJlc291cmNlU3Rh
dGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc2l6ZSgpOwotICAgIAorCisgICAgcmV0
dXJuIGNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQs
IGN1cnJlbnRQcmV2YWxlbmNlKTsKK30KKworUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjo6Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHVu
c2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgdW5zaWduZWQgc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBjdXJyZW50UHJldmFsZW5jZSkKK3sKICAgICBpZiAo
IXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudAogICAgICAgICAmJiAhc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50CiAgICAgICAgICYmICFzdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgK
aW5kZXggYWNmMWYzODlkZDUxYTAwYzUxMDdkYzY3MmY5ZDNmYmE5ZjJiZmVmMC4uNThmNTY1YTEx
YTc3MzVkMDQxMjkzY2FiZjQxYzI1YmM2NTVkMTk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgK
KysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ny0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDIsMTAgKzQyLDExIEBAIHB1YmxpYzoKICAgICBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllcigpID0gZGVmYXVsdDsKICAgICB2aXJ0dWFsIH5SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcigpID0gZGVmYXVsdDsKICAgICBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIGNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZSBjdXJyZW50UHJldmFsZW5jZSk7CisgICAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBjYWxj
dWxhdGVSZXNvdXJjZVByZXZhbGVuY2UodW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQs
IHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgdW5zaWduZWQgdG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGN1cnJl
bnRQcmV2YWxlbmNlKTsKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgY2xhc3NpZnkodW5z
aWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNDb3VudCkKKyAgICB2aXJ0dWFsIGJvb2wgY2xhc3NpZnkodW5zaWduZWQgc3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnNDb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hv
bGQoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCk7Cisg
ICAgICAgIHJldHVybiBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hvbGQoc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQs
IHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCk7CiAgICAgfQogICAgIGJvb2wgY2xh
c3NpZnlXaXRoVmVjdG9yVGhyZXNob2xkKHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQpOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9jb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmNwcCBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm0vY2xhc3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
ckNvY29hLmNwcAppbmRleCBhY2ZiZTNjZGJjMWMzYTk1MWY3MjM3MGJkNTk4N2U0NzJlOGQ0YzI1
Li5lMWY1MzA0ZTkzMjI2ODRlYzYwNjI2YzYzMDM5NzVmMjNkMWI4YzAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0NsYXNzaWZpZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFz
c2lmaWVyL2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwCkBA
IC0zNSwxNSArMzUsMTUgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWJvb2wgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYTo6Y2xhc3NpZnkodW5zaWduZWQgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3Vu
dCkKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYTo6Y2xhc3NpZnko
dW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25lZCBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnNDb3VudCkKIHsKICAgICBpZiAoIWNhblVzZUNvcmVQcmVkaWN0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hvbGQoc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291
bnQsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCk7CisgICAgICAgIHJldHVybiBj
bGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hvbGQoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHN1YmZyYW1lVW5kZXJU
b3BGcmFtZU9yaWdpbnNDb3VudCk7CiAKICAgICBWZWN0b3I8c3ZtX25vZGU+IGZlYXR1cmVzOwog
Ci0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkKLSAgICAgICAg
ZmVhdHVyZXMuYXBwZW5kKHsxLCBzdGF0aWNfY2FzdDxkb3VibGU+KHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZU9yaWdpbnNDb3VudCl9KTsKKyAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50KQorICAgICAgICBmZWF0dXJlcy5hcHBlbmQoezEsIHN0YXRpY19jYXN0PGRv
dWJsZT4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50KX0pOwogICAgIGlmIChz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQpCiAgICAgICAgIGZlYXR1cmVzLmFwcGVu
ZCh7Miwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291
bnQpfSk7CiAgICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCmluZGV4IGY1NTg0MzI1OTBmYmRlYjY4
OTc5M2UwYjQ5YjI2Nzc4NDE2N2QyZWEuLjUyN2Y1ZDQ3YzBjOGZiODNjOWFiZTlkMjljMzQzNGE0
MDFmNGRmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
LnlhbWwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbApAQCAt
MTM3OSw2ICsxMzc5LDE0IEBAIEl0cERlYnVnTW9kZUVuYWJsZWQ6CiAgIGh1bWFuUmVhZGFibGVE
ZXNjcmlwdGlvbjogIkludGVsbGlnZW50IFRyYWNraW5nIFByZXZlbnRpb24gRGVidWcgTW9kZSIK
ICAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMKIAorSVRQRGF0YWJhc2VF
bmFibGVkOgorICB0eXBlOiBib29sCisgIGRlZmF1bHRWYWx1ZTogZmFsc2UKKyAgaHVtYW5SZWFk
YWJsZU5hbWU6ICJJVFAgRGF0YWJhc2UgQmFja2VuZCIKKyAgaHVtYW5SZWFkYWJsZURlc2NyaXB0
aW9uOiAiRW5hYmxlIEludGVsbGlnZW50IFRyYWNraW5nIFByZXZlbnRpb24gRGF0YWJhc2UgQmFj
a2VuZCIKKyAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMKKyAgY2F0ZWdv
cnk6IGludGVybmFsCisKIFNlcnZpY2VXb3JrZXJzRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBk
ZWZhdWx0VmFsdWU6IERFRkFVTFRfU0VSVklDRV9XT1JLRVJTX0VOQUJMRUQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0Cmlu
ZGV4IDc0MDdjYzIxOTAzZTI2NGI4ODQ4Yzg1YTU4OTUwODQ0ZDNkZGFjNDguLjJlZmI4ZTU5OGI2
ZDQ3ZTIxNzJlYjkzNWJiMjk0NjMwYTNjYzIyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtNDIsOCArNDIs
MTAgQEAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldFN0cmVhbS5jcHAKIE5ldHdvcmtQcm9j
ZXNzL1BpbmdMb2FkLmNwcAogTmV0d29ya1Byb2Nlc3MvUHJlY29ubmVjdFRhc2suY3BwCiAKK05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0Nvb2tpZXMv
V2ViQ29va2llTWFuYWdlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGM0M2U0ZTUw
OTBiZWRjNzFjOWRlNjNmODY3Zjc0MGE5NDFmZDBmMTIuLmMwMGZhNTdiOTdkYTk2ZmIzZGFjYzdi
NDYyZGExZDRmNDM3MWZlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5LDYgKzI5LDcg
QEAgTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0KIE5ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KIE5ldHdvcmtQcm9jZXNzL2NvY29h
L05ldHdvcmtTZXNzaW9uQ29jb2EubW0KIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAKQEAgLTMzMiw3
ICszMzMsNiBAQCBVSVByb2Nlc3MvQ29jb2EvTWVkaWFDYXB0dXJlVXRpbGl0aWVzLm1tCiBVSVBy
b2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVu
dEltcGxDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94
eS5tbQotVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNv
Y29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tCiBVSVBy
b2Nlc3MvQ29jb2EvU2Vzc2lvblN0YXRlQ29kaW5nLm1tCiBVSVByb2Nlc3MvQ29jb2EvU3lzdGVt
UHJldmlld0NvbnRyb2xsZXJDb2NvYS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmVDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTViYTYyNzY2NTJl
MWRmNmZkYTRkZDhiNTc1NGUzYmYwMWMzNzZkMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQorKysgL2Rldi9udWxsCkBAIC0xLDgw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCi0KLSNpZiBFTkFCTEUoUkVTT1VS
Q0VfTE9BRF9TVEFUSVNUSUNTKQotCi0jaW1wb3J0IDxXZWJDb3JlL1JlZ2lzdHJhYmxlRG9tYWlu
Lmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW1wb3J0IDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCkKLXsK
LSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IGluaXRPbmNlOwotCi0gICAgZGlzcGF0Y2hfb25j
ZSgmaW5pdE9uY2UsIF57Ci0gICAgICAgIFNlY29uZHMgdGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiJdKTsKLSAgICAg
ICAgaWYgKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPiAwX3MgJiYgdGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbiA8PSAyNF9oICogMzApCi0gICAgICAgICAgICBzZXRUaW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgICAgIFNlY29uZHMg
bWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFtbTlNVc2VyRGVmYXVsdHMgc3Rh
bmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiXSk7Ci0gICAgICAgIGlmIChtaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPiAwX3MgJiYgbWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsIDwgMV9oKQotICAgICAgICAgICAgc2V0TWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbCk7Ci0KLSAgICAgICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUoW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSJdKTsKLSAgICAgICAgaWYgKGdyYW5kZmF0aGVyaW5n
VGltZSA+IDBfcyAmJiBncmFuZGZhdGhlcmluZ1RpbWUgPD0gMjRfaCAqIDcpCi0gICAgICAgICAg
ICBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoZ3JhbmRmYXRoZXJpbmdUaW1lKTsKLQotICAgICAgICBz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRh
cmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJJdHBEZWJ1Z01vZGUiXSk7Ci0gICAgICAgIGF1
dG8qIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBzdHJpbmdGb3JLZXk6QCJJdHBNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSJdOwotICAgICAgICBpZiAoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkgewotICAgICAg
ICAgICAgVVJMIHVybCB7IFVSTCgpLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlIH07Ci0g
ICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJo
dHRwOi8vIik7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGVidWdNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdXJsID0geyBVUkwoKSwgYnVpbGRlci50
b1N0cmluZygpIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQo
KSkKLSAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShSZWdp
c3RyYWJsZURvbWFpbiB7IHVybCB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIFNlY29uZHMgY2Fj
aGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NhY2hl
TWF4QWdlQ2FwIl0pOwotICAgICAgICBpZiAoY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNv
dXJjZXMgPiAwX3MgJiYgY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMgPD0gMjRf
aCAqIDM2NSkKLSAgICAgICAgICAgIHNldENhY2hlTWF4QWdlQ2FwKGNhY2hlTWF4QWdlQ2FwRm9y
UHJldmFsZW50UmVzb3VyY2VzKTsKLSAgICAgICAgCi0gICAgICAgIFNlY29uZHMgY2xpZW50U2lk
ZUNvb2tpZXNBZ2VDYXAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91
YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsaWVudFNpZGVDb29raWVzQWdlQ2Fw
Il0pOwotICAgICAgICBpZiAoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAgPiAwX3MgJiYgY2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXAgPD0gMjRfaCAqIDM2NSkKLSAgICAgICAgICAgIHNldEFnZUNhcEZv
ckNsaWVudFNpZGVDb29raWVzKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKTsKLSAgICB9KTsKLX0K
LQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDk4NzQ2YzM3YzUyNGM4Nzg0YjdhNmU4MjY2NzY2
NjUxNzVmNmZiMGQuLmJjOTQ0ZjEyMTJiZjlmZTQwZGFmNjE4YmQ0ZTM2ODk4NTkwYzMwODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbQpAQCAtMjk2LDYgKzI5Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAjaWYg
RU5BQkxFKFBST1hJTUlUWV9ORVRXT1JLSU5HKQogICAgIHBhcmFtZXRlcnMud2lyZWxlc3NDb250
ZXh0SWRlbnRpZmllciA9IG1fY29uZmlndXJhdGlvbi0+d2lyZWxlc3NDb250ZXh0SWRlbnRpZmll
cigpOwogI2VuZGlmCisKKyAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0g
W2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5h
bERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9y
bUludmFsaWRhdGVDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1Byb3Zpc2lvbmFsUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNp
b25hbFBhZ2VQcm94eS5oCmluZGV4IDg4ODNmNzM0NTY3Njk0NGY0M2IzODgwMWM1YTUxYWMwNzBi
MjQ1YjEuLjE2YmQ1Y2Q1ODUxM2FmYWU5YjAwMmQ2OTI4MjczMjBhNjY3NzQ5ODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaApAQCAtMjgsNiAr
MjgsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNpdGVQb2xpY2ll
c0RhdGEuaCIKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggM2MyMjA5N2FjNzkyMzhkMWJlMTI0ZmJiZGIy
YTMzNWRjYmZiMTY4MS4uZjQ4ZjFiMTZlMmJlMTUzYmVlYzdkNWYzYzk3ZjljODdhMjFhMDRmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtODYsNiAr
ODYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxp
Y2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
Lmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5o
PgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlZGIwNTkzNmI1ODcxZDNhNTFmMTRiODU0
MTlhZmFiYWRmOTBhMDZmLi5kN2UyMTk4Y2I3MDkyMzlhZDM1MmZkODhhYmZkMzNiMTA5ZjZjNzQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTM1MzAsNiArMzUzMCw4IEBACiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dl
YnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1
QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5h
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NjJCNzQ4NDEyMEJCQTJEMDA4MTkz
MzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJN0EwRDc4NjEyMjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTdBMEQ3ODYyMjIwNzkxRUQwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA7IHBhdGggPSBDbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0ExNTA2NzIxREQ1NjI5ODAwMUY0QjU4IC8qIGNvbS5hcHBsZS5XZWJL
aXQucGx1Z2luLWNvbW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSAiY29tLmFwcGxlLldl
YktpdC5wbHVnaW4tY29tbW9uLnNiIjsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9XZWJLaXQyL2Nv
bS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCTdBMUUyQTg0MUVFRkU4OEEwMDM3QTBFMCAvKiBBUElOb3RpZmljYXRp
b25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElOb3RpZmlj
YXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTNBQ0UxQTFF
RUVGNzhDMDBBODY0QTQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVuZGxlUGFnZUxvYWRl
ckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU0OSw2ICszNTUxLDkg
QEAKIAkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdBQjZFQTQ0MUVFQUFFMjMwMDAzN0IyQiAvKiBBUElJY29uRGF0YWJhc2VDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSWNvbkRhdGFiYXNlQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQjZFQTQ2MUVFQUI2QjAwMDAzN0IyQiAv
KiBBUElHZW9sb2NhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJN0FDRTgyRTcyMjFDQUUwNjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0
QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgcGF0aCA9
IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTkyMjFERTcyMjAwMERBOTRDIC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW07IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QUYyMzYxRTFFNzlBM0I0MDA0MzhBMDUgLyogV2ViRXJyb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkVycm9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdBRjIzNjFGMUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdBRjIzNjIyMUU3OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJvcnNDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVycm9yc0NvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzY5OSw3ICszNzA0LDYgQEAKIAkJ
ODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzcy
REIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyRTFBNjc3RDRB
MDBDNjk3QzUgLyogV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODM3QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4IC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjYyMUE2OEIzNDIw
MDMwRjM4NiAvKiBBUElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBUElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25v
c3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBf
V0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgzODkxQjZBMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMyNSw3ICs1MzI5LDYgQEAKIAkJ
CQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5
LmggKi8sCiAJCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0Yg
LyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAotCQkJCTgzN0E2NjAwMjBFMkFE
ODQwMEE5REJEOCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbSAq
LywKIAkJCQk1Q0E5ODU0QjIxMEJFQjczMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZ0Nv
Y29hLm1tICovLAogCQkJCTFBMDAyRDQ3MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVD
b2RpbmcuaCAqLywKIAkJCQkxQTAwMkQ0NjE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRl
Q29kaW5nLm1tICovLApAQCAtNjkyNywxMCArNjkzMCwxNSBAQAogCQk3QTg0M0ExRDIxRTQxRkQ5
MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCAqLywKKwkJCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNG
NTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLywKIAkJCQk3QUZC
RDM2NDIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmNwcCAqLywKIAkJCQk3QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmggKi8sCiAJCQkJN0FGQkQzNjkyMUU1NDJFODAwNURCQUNCIC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8sCiAJCQkJN0FG
QkQzNjgyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50
U3RvcmFnZS5oICovLAorCQkJCTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAorCQkJCTdBQ0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAv
KiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk3QUNFODJFOTIyMURFNzIy
MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8sCiAJCQkJ
N0E0MUU5RkEyMUY4MURBQzAwQjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5o
ICovLAogCQkJCTdBM0ZFQ0ExMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVz
LmggKi8sCiAJCQkJN0E4NDNBMUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5jcHAgKi8sCkBAIC05NjA4LDYgKzk2MTYsNyBAQAogCQkJCTdDMzYxRDc5
MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNTczOUJCRDFCNDIwNDJEMDBEMjU4QzEgLyogV2ViVXNl
ck1lZGlhQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0VFNTc1QzFEQjdENjExMDBDNzRD
NTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3
MkZENDQzMjIyNjVDRTIwMEExRUNDMyAvKiBXZWJWaWV3RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERkM3REJCMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3
SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlDRDU1QUExMjhFMjk0RjAwMTMzQzg1IC8qIFdL
QWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTIz
MkRGNDE4QjI5RDY4MDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5o
IGluIEhlYWRlcnMgKi8sCkBAIC05NzQ0LDcgKzk3NTMsNiBAQAogCQkJCUM1NDI1NkJBMThCRUMx
OEMwMERFNDE3OSAvKiBXS0Zvcm1TZWxlY3RDb250cm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjA4Q0Y1MjFENjNDMTNBMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UGlja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjA4Q0Y1NDFENjNDMTQwMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UG9wb3Zl
ci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTcyRkQ0NDMyMjI2NUNFMjAwQTFFQ0MzIC8qIFdlYlZp
ZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNDY5NUEx
MjE0RURGNDAwMEI5OEVCIC8qIFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMzdERkE3MDAxODEwQkI5MjAwMUY0QTlGIC8qIFdLRm91bmRhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNEMDEzOUIxMTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJhbWUuaCBpbiBI
ZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363552</attachid>
            <date>2019-03-04 14:51:42 -0800</date>
            <delta_ts>2019-03-04 16:13:22 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-194867-20190304145141.patch</filename>
            <type>text/plain</type>
            <size>284993</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2VhYmI3NmFjYjIzMDhm
MjllZTdjYzNhOTAyMzVkNWZlOTI4NDc1Ni4uZTI1MzE2YTAwM2Q4MzFiM2E0YjRhNDQxZTUzZGQ2
NzE5NDEwYzg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVt
ZXouCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBvcnQg
dXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxzbyBl
eHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdlYkNv
cmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRhYmFz
ZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIwMTkt
MDMtMDQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IHRoZSBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDFmNTFiZTg0MDRmNDEwMzg1NzM5YTI1NDgxYmMx
MWRjMzkyZDFiYi4uZjQyYzg1NjNiMTJmOWVjMjA5NDg0YWMwZDE4ODAwYTkyNzY5MzU3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyODMgQEAKKzIwMTktMDItMjEgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGEgU1FMaXRlIGRhdGFiYXNlIHRvIGhvbGQg
dGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODY3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NDI0MDg1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBU
aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkYXRhYmFzZSBwbGlzdCBpcyBpbmVmZmljaWVudC4g
SXQgcmVxdWlyZXMgbW9yZSBtZW1vcnkgdXNlCisgICAgICAgIHRoYW4gaXQgbmVlZHMsIGFuZCBm
b3JjZXMgbG90cyBvZiBsb29waW5nIGFuZCBzdHJpbmcgY29tcGFyaXNvbnMgdG8gZmluZCBpbmZv
cm1hdGlvbi4KKworICAgICAgICBUaGlzIHByb2JsZW0gaGFzIGFscmVhZHkgYmVlbiBzb2x2ZWQg
aW4gdGhlIGZvcm0gb2YgcmVsYXRpb25hbCBkYXRhYmFzZXMuIFdlIHVzZSB0aGVtCisgICAgICAg
IGVsc2V3aGVyZSBpbiBXZWJLaXQsIGFuZCBzaG91bGQgZG8gc28gZm9yIHRoaXMgc3RvcmFnZSBh
cyB3ZWxsLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY3JlYXRlcyBhbiBvcHRpb25hbCBTUUxpdGUg
ZGF0YWJhc2UgdG8gaGFuZGxlIElUUCBvcGVyYXRpb25zLgorCisgICAgICAgIDEuIEl0IGFkZHMg
YSBuZXcgaW50ZXJuYWwgZXhwZXJpbWVudGFsIGZlYXR1cmUgZmxhZyB0byBhY3RpdmF0ZSBpdC4g
SXQgcmVxdWlyZXMgdGhlIHVzZXIKKyAgICAgICAgICAgZXhpdCBhbmQgcmVzdGFydCB0aGUgcHJv
Y2VzcyB0byB0YWtlIGVmZmVjdC4KKyAgICAgICAgMi4gSXQgcG9wdWxhdGVzIGl0c2VsZiBmcm9t
IHRoZSBleGlzdGluZyBwbGlzdCBmaWxlIChpZiBpdCBleGlzdHMpLgorICAgICAgICAzLiBJdCBz
dG9wcyB1c2luZyB0aGUgcGxpc3QgaW4gZmF2b3Igb2YgdGhlIGRhdGFiYXNlLgorICAgICAgICA0
LiBJdCBkb2VzIHF1ZXJpZXMgYW5kIG90aGVyIG9wZXJhdGlvbnMgdXNpbmcgdGhlIGRhdGFiYXNl
IGluc3RlYWQgb2YgdGhlIG9sZCBoYXNoIHRhYmxlCisgICAgICAgICAgIGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGlzaXRpbmcgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIGNsYXNzIGludG8gYSBiYXNlCisgICAgICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBjbGFzcywgd2hpY2ggUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlIGlzIGJhc2VkIG9uLgorICAgICAgICBJdCBhZGRzIGEgbmV3IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMg
b2YgU1FMCisgICAgICAgIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgY29kZSBjaGFuZ2Vz
IHNob3VsZCBub3QgaGF2ZSBhbnkgaW1wYWN0IG9uIGV4aXN0aW5nIG9wZXJhdGlvbnMsIGFuZCB3
aGVuIGVuYWJsZWQKKyAgICAgICAgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdGVzdCByZXN1bHRz
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y3JlYXRlU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9t
YWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlbGF0aW9uc2hpcEV4aXN0cyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXApOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29u
ZmlybURvbWFpbkRvZXNOb3RFeGlzdCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZyb21TdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkYXRhYmFzZUlzRW1wdHkgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9t
TWVtb3J5U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5IGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJl
Y29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERv
bWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OmJ1aWxk
TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCk6CisgICAgICAg
IChXZWJLaXQ6Omxpc3RUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNs
YXNzaWZ5UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9yYWdlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNj
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJG
cmFtZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclBy
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZhdGhlcmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvb2tpZVRyZWF0bWVudEZvck9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VB
Y2Nlc3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckJsb2NraW5nU3RhdGVGb3JE
b21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXZhbGVudERvbWFpbnMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Zmlu
ZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVt
b3ZlV2Vic2l0ZURhdGFGb3IpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlTGFzdFNlZW4p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nl
c3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRl
ZENvdW50Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5bmNTdG9yYWdlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0Ojpkb21haW5zVG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpP
cGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpP
cGVyYXRpbmdEYXRlOjp0b2RheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGlu
Z0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdEYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6bWVyZ2VPcGVyYXRpbmdEYXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OmNvbXB1dGVJbXBvcnRhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVEYXRhUmVjb3Jk
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRo
ZXJFeGlzdGluZ1dlYnNpdGVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2No
ZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2FuY2Vs
UGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldENhY2hlTWF4QWdlQ2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lk
ZUNvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNT
dGF0aXN0aWNzRXhwaXJlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9j
ZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c3RvcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5h
YmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAo
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojpkb21haW5z
VG9TdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUp
OgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjp0b2RheSk6CisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJh
dGluZ0RhdGU6Om9wZXJhdG9yPD0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6flJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5jZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5k
ZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbmNl
bFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRDYWNoZU1heEFnZUNhcCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2Fj
aGVNYXhBZ2VDYXApOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkUmVt
b3ZlRGF0YVJlY29yZHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRv
bWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNzRXBpcmF0aW9uVGlt
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bWVyZ2VPcGVyYXRpbmdEYXRlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRpc3RpY3NF
eHBpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmxvZ1Rlc3RpbmdFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlYnVnTG9nRG9tYWluc0lu
QmF0Y2hlcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oLgorICAg
ICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdEYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc0VtcHR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc0RlYnVnTW9kZUVu
YWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnN0b3JlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFibGVkKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZUNvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0uCisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJ
Zk5lZWRlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJt
aXRUZWxlbWV0cnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVyc2lzdGVu
dFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJm
b3JtRGFpbHlUYXNrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z1N1YnJlc291cmNlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5j
ZSk6CisgICAgICAgICogUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKiBXZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0wMy0wNCAgTWljaGFlbCBDYXRhbnph
cm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gRW5hYmxlIHdlYiBw
cm9jZXNzIHNhbmRib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgKaW5kZXggNTRmYjZiYjc5MDFhZTFkZGE0MmU3N2NlZmUzN2FkNDljYjZlODg5Yi4uNjJk
OWVkMzY0YTQ2ZmMxMTdjZGJlYmUxODc2NTZhZDgxZmIzYzRkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1f
aXRwRGVidWdNb2RlID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01vZGVFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQgc2V0SVRQRGF0
YWJhc2VFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNJVFBEYXRhYmFzZUVuYWJsZWQgPSBp
c0VuYWJsZWQ7IH0KKyAgICBib29sIGlzSVRQRGF0YWJhc2VFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc0lUUERhdGFiYXNlRW5hYmxlZDsgfQorCiAgICAgdm9pZCBzZXRSZXN0cmljdGVkSFRU
UFJlc3BvbnNlQWNjZXNzKGJvb2wgaXNFbmFibGVkKSB7IG1faXNSZXN0cmljdGVkSFRUUFJlc3Bv
bnNlQWNjZXNzID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCByZXN0cmljdGVkSFRUUFJlc3BvbnNl
QWNjZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pc1Jlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3M7
IH0KIApAQCAtNTM0LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21vdXNlbW92ZUV2
ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCisg
ICAgYm9vbCBtX2lzSVRQRGF0YWJhc2VFbmFibGVkIHsgZmFsc2UgfTsKKwogICAgIGZyaWVuZCBj
bGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM+OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAppbmRleCA0MGZj
ZTA2NDQwNDUxMzc0ZDQ2NDkzMGFmNDZjOTA3NzNlM2Y4NmE0Li42NDNkMjQyNjc2OWZmNDAwNDE4
OWE4ZjY2OTBlYjFkNDMwNmFiMmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCB0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNs
ZWFyQWxsVGFibGVzKCk7Ci0gICAgaW50IHJ1blZhY3V1bUNvbW1hbmQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBpbnQgcnVuVmFjdXVtQ29tbWFuZCgpOwogICAgIGludCBydW5JbmNyZW1lbnRhbFZh
Y3V1bUNvbW1hbmQoKTsKICAgICAKICAgICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKaW5kZXggYTE5M2Q4YzI0YjBiZDAyNDk2
NWJiMTA1NDQ2NDIzYmJjOGY1YmZlOS4uZjM2NmM3MzAyZjRiYTVhNWY0YWMxYTYxYzE2MjYzMzEz
OTMyZDNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1l
bnQuaApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldENvbHVtbk5hbWUo
aW50IGNvbCk7CiAgICAgU1FMVmFsdWUgZ2V0Q29sdW1uVmFsdWUoaW50IGNvbCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGdldENvbHVtblRleHQoaW50IGNvbCk7Ci0gICAgZG91YmxlIGdl
dENvbHVtbkRvdWJsZShpbnQgY29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgZ2V0Q29s
dW1uRG91YmxlKGludCBjb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBnZXRDb2x1bW5JbnQo
aW50IGNvbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50NjRfdCBnZXRDb2x1bW5JbnQ2NChpbnQg
Y29sKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKGlu
dCBjb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJjOGU5NGMzZDI3MTE5MjNhN2Y1MjBjNmI3MWJiZmYw
NDU3OGZhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTAs
MCArMSwxNTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCisKKyNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKKyNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3Mu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+
CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNkZWZpbmUgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihz
ZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1Nf
XykKKyNkZWZpbmUgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZtdCwg
Li4uKSBSRUxFQVNFX0xPR19FUlJPUl9JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCksIE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIFJFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQsIC4uLikgICgodm9pZCkwKQorI2RlZmluZSBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pICAoKHZvaWQpMCkK
KyNlbmRpZgorCitjb25zdGV4cHIgYXV0byBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkgPSAiU0VM
RUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOworY29uc3RleHByIGF1dG8gaW5z
ZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJl
Z2lzdHJhYmxlRG9tYWluLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCIKKyAgICAibW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBp
c1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkgPSAiSU5T
RVJUIElOVE8gVG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Citjb25zdGV4cHIgYXV0byBk
b21haW5JREZyb21TdHJpbmdRdWVyeSA9ICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gc3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkg
IgorICAgICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPT0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9RdWVyeSA9ICJJTlNFUlQgSU5UTyBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChz
b3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0
byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUIDEgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFp
bklEID0gPyAiCisgICAgIkFORCB0b0RvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhw
ciBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5ID0gIklOU0VSVCBJTlRPIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCkg
IgorICAgICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/ICIKKyAgICAi
QU5EIGZyb21Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7Citjb25zdGV4cHIgYXV0byBzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkgIgorICAg
ICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/ICIKKyAgICAiQU5E
IHRvcEZyYW1lRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8gc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBJTlRPIFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMgKHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
SUQpICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZS
T00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCisgICAgIldIRVJFIHN1YnJlc291
cmNlRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBG
Uk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2Nv
bnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSA9ICJJTlNFUlQg
SU5UTyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIChzdWJyZXNvdXJjZURvbWFpbklELCB0
b0RvbWFpbklEKSAiCisgICAgIlNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVD
VCAxIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURv
bWFpbklEID0gPyAiCisgICAgIkFORCB0b0RvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9N
IE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0
ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5ID0gIklOU0VSVCBJ
TlRPIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoc3VicmVzb3VyY2VEb21haW5JRCwg
ZnJvbURvbWFpbklEKSAiCisgICAgIlNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUIDEgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gIgorICAgICJBTkQgZnJvbURvbWFpbklEID0gKFNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJf
czsKK2NvbnN0ZXhwciBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBoYWRVc2VySW50ZXJhY3Rpb24gPSA/LCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSA9ID8gIgorICAgICJXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVMYXN0U2VlblF1ZXJ5ID0gIlVQREFURSBPYnNl
cnZlZERvbWFpbnMgU0VUIGxhc3RTZWVuID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8i
X3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBpc1ByZXZhbGVudFJlc291cmNlUXVlcnkgPSAi
U0VMRUNUIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJj
ZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzVmVyeVByZXZhbGVudCA9ID8g
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRv
IGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBpc1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVE
b21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaGFkVXNlckludGVyYWN0aW9uUXVlcnkgPSAi
U0VMRUNUIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUg
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29u
c3RleHByIGF1dG8gdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZh
dGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlv
biA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKKworY29uc3Rl
eHByIGF1dG8gY3JlYXRlT2JzZXJ2ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxFIE9ic2VydmVkRG9t
YWlucyAoIgorICAgICJkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURv
bWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFM
IE5PVCBOVUxMLCAiCisgICAgImhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVk
IElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwg
aXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRF
R0VSIE5PVCBOVUxMLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlcklu
dGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCk7Il9zOworICAgIAorY29uc3RleHBy
IGF1dG8gY3JlYXRlVG9wTGV2ZWxEb21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERvbWFp
bnMgKCIKKyAgICAidG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05TVFJB
SU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgorICAgICJSRUZF
UkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsK
KyAgICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVEFCTEUgU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zICgi
CisgICAgImRvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvcExldmVsRG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAiCisgICAgIkNPTlNUUkFJTlQgZmtEb21haW5J
RCBGT1JFSUdOIEtFWShkb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWlu
SUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKHRvcExldmVsRG9tYWlu
SUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVU
RSBDQVNDQURFKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvICgi
CisgICAgInNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNF
UyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIK
KyAgICAiRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnMo
dG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsKKyAgICAKK2NvbnN0ZXhw
ciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSA9ICJDUkVBVEUgVEFCTEUg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICgiCisgICAgInRhcmdldERvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJ
R04gS0VZKHRhcmdldERvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZl
bERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9t
YWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERF
TEVURSBDQVNDQURFKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zICgiCisgICAgInN1YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJh
bWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YkZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VT
IFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9z
OworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIgor
ICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWlu
SUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFp
bklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NB
REUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNFUyBUb3BM
ZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsKKyAg
ICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSAi
Q1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic3VicmVz
b3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5V
TEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBP
YnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJ
R04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBP
TiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb20gKCIKKyAgICAic3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShz
dWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkg
T04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZF
UkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsK
KyAgICAKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0
b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5
UGF0aCkKKyAgICA6IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShzdG9yZSwgd29ya1F1ZXVl
KQorICAgICwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0aCArICIv
b2JzZXJ2YXRpb25zLmRiIikKKyAgICAsIG1fb2JzZXJ2ZWREb21haW5Db3VudChtX2RhdGFiYXNl
LCBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkpCisgICAgLCBtX2luc2VydE9ic2VydmVkRG9tYWlu
U3RhdGVtZW50KG1fZGF0YWJhc2UsIGluc2VydE9ic2VydmVkRG9tYWluUXVlcnkpCisgICAgLCBt
X2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50KG1fZGF0YWJhc2UsIGluc2VydFRvcExldmVs
RG9tYWluUXVlcnkpCisgICAgLCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudChtX2RhdGFi
YXNlLCBkb21haW5JREZyb21TdHJpbmdRdWVyeSkKKyAgICAsIG1fc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zU3RhdGVtZW50KG1fZGF0YWJhc2UsIHN0b3JhZ2VBY2Nlc3NVbmRlclRv
cEZyYW1lRG9tYWluc1F1ZXJ5KQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKG1f
ZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSkKKyAgICAsIG1fdG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cyhtX2RhdGFiYXNlLCB0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvRXhpc3RzUXVlcnkpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSht
X2RhdGFiYXNlLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSkKKyAgICAsIG1fdG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzKG1fZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbUV4aXN0c1F1ZXJ5KQorICAgICwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zKG1fZGF0YWJhc2UsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSkKKyAg
ICAsIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzKG1fZGF0YWJhc2UsIHN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnNRdWVyeSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3Rz
KG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5KQor
ICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKG1fZGF0YWJhc2UsIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUb0V4aXN0cyhtX2RhdGFiYXNlLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzUXVlcnkpCisgICAgLCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbShtX2RhdGFi
YXNlLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSkKKyAgICAsIG1fc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbUV4aXN0c1F1ZXJ5KQorICAgICwgbV9tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVy
eSkKKyAgICAsIG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXBkYXRlTGFz
dFNlZW5RdWVyeSkKKyAgICAsIG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXBkYXRlUHJldmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1faXNQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpc1ByZXZhbGVudFJlc291cmNlUXVlcnkp
CisgICAgLCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNl
LCB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1faXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VR
dWVyeSkKKyAgICAsIG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNl
LCBjbGVhclByZXZhbGVudFJlc291cmNlUXVlcnkpCisgICAgLCBtX2hhZFVzZXJJbnRlcmFjdGlv
blN0YXRlbWVudChtX2RhdGFiYXNlLCBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSkKKyAgICAsIG1f
dXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudChtX2RhdGFiYXNlLCB1cGRhdGVHcmFuZGZhdGhl
cmVkUXVlcnkpCisgICAgLCBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudChtX2RhdGFiYXNlLCBp
c0dyYW5kZmF0aGVyZWRRdWVyeSkKKyAgICAsIG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25T
dGF0ZW1lbnQobV9kYXRhYmFzZSwgZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25RdWVyeSkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyNlbmRpZgorCisgICAgaWYgKCFt
X2RhdGFiYXNlLm9wZW4obV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBw
YXRoOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9y
YWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU2luY2Ugd2UgYXJl
IHVzaW5nIGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFsIGRpc3BhdGNoIGJsb2NrcyBtYXkg
YmUgY2FsbGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRo
cmVhZGluZ0NoZWNrcygpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPYnNl
cnZlZERvbWFpbnMiX3MpKSB7CisgICAgICAgIGlmICghY3JlYXRlU2NoZW1hKCkpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
e3B1YmxpY31zLCBkYXRhYmFzZSBwYXRoOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFwcmVwYXJlU3RhdGVtZW50cygpKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHdvcmtRdWV1ZS5kaXNwYXRjaEFmdGVyKDVfcywgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSB7CisgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgIHdlYWtUaGlzLT5jYWxj
dWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsKKyAgICB9KTsKK30KKworYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICBpZiAobV9vYnNlcnZlZERvbWFpbkNvdW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAg
ICByZXN1bHQgPSAhbV9vYnNlcnZlZERvbWFpbkNvdW50LmdldENvbHVtbkludCgwKTsKKyAgICAK
KyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX29ic2VydmVkRG9tYWluQ291bnQucmVzZXQoKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlT2Jz
ZXJ2ZWREb21haW4pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYnNl
cnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9w
TGV2ZWxEb21haW5zKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9w
TGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBp
biBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucykpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJh
c2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBh
cmVTdGF0ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAg
ICAgCisgICAgaWYgKG1fb2JzZXJ2ZWREb21haW5Db3VudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9kb21haW5JREZyb21TdHJpbmdTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
RXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20ucHJlcGFyZSgpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0
cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlTGFzdFNlZW5TdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2lzVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9jbGVh
clByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICApIHsKKyAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBtZXNz
YWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIGxvYWRTdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGxv
YWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSk7CisjZW5kaWYKKworICAgIGlmIChtX2lu
c2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRUZXh0KDEsIGxvYWRTdGF0aXN0aWNzLnJl
Z2lzdHJhYmxlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNl
cnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kRG91YmxlKDIsIGxvYWRTdGF0aXN0aWNzLmxh
c3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCgzLCBsb2FkU3RhdGlz
dGljcy5oYWRVc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmREb3VibGUoNCwgbG9hZFN0YXRpc3RpY3MubW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5i
aW5kSW50KDUsIGxvYWRTdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRJbnQoNiwgbG9hZFN0
YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
aW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg3LCBsb2FkU3RhdGlzdGljcy5p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0
T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg4LCBsb2FkU3RhdGlzdGljcy5kYXRhUmVj
b3Jkc1JlbW92ZWQpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LmJpbmRJbnQoOSwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9p
bnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDEwLCBsb2FkU3RhdGlzdGljcy50
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5l
dHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRP
YnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31z
IiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHJlc2V0
UmVzdWx0ID0gbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5yZXNldCgpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYgc3RhdGVt
ZW50LCB1bnNpZ25lZCBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc2Vj
b25kRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKHN0YXRlbWVudC5iaW5kSW50KDEsIGZpcnN0RG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwgc2Vjb25kRG9tYWluLnN0cmluZygpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFpblJlbGF0aW9uc2hpcFN0YXRlbWVu
dCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIHJlbGF0aW9uU2hpcEV4
aXN0cyA9ICEhc3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKworICAgIGludCByZXNldFJlc3Vs
dCA9IHN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJl
c2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHJlbGF0aW9uU2hpcEV4
aXN0czsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50
LCB1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHN0YXRlbWVudC5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LmJp
bmRUZXh0KDIsIHRvcEZyYW1lLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV9p
bnNlcnREb21haW5SZWxhdGlvbnNoaXBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAg
IHJldHVybiB0cnVlOworfQorCisjaWZuZGVmIE5ERUJVRworYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29uZmlybURvbWFpbkRvZXNOb3RFeGlzdChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LmJpbmRUZXh0
KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
ICAgICAKKyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuc3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJp
bmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwg
cmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJl
c2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FM
SVRFX09LKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit1bnNpZ25lZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIHVuc2lnbmVkIGRvbWFpbklEID0gMDsKKworICAgIGlmIChtX2RvbWFpbklE
RnJvbVN0cmluZ1N0YXRlbWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGRvbWFpbklEOworICAgIH0KKworICAgIGRvbWFpbklEID0gbV9kb21haW5JREZyb21TdHJpbmdT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21h
aW5JREZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0
UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiBkb21h
aW5JRDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiBsb2FkU3RhdGlzdGljcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFpbklEKGxvYWRTdGF0aXN0aWNz
LnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9h
ZFN0YXRpc3RpY3Muc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zKQorICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQsIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluKTsKKworICAg
IGZvciAoYXV0byYgdG9Eb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELCB0b0RvbWFpbik7CisgICAgCisgICAg
Zm9yIChhdXRvJiBmcm9tRG9tYWluIDogbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQsIGZyb21Eb21haW4pOworICAg
IAorICAgIGZvciAoYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAo
bV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELCB0b3BG
cmFtZURvbWFpbik7CisgICAgCisgICAgZm9yIChhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRT
dGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJl
Z2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAKKyAgICBmb3IgKGF1dG8m
IHRvRG9tYWluIDogbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykK
KyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRCwgdG9Eb21haW4pOworICAgIAorICAgIGZvciAo
YXV0byYgZnJvbURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbSkKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELCBmcm9tRG9tYWluKTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9t
TWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtZW1v
cnlTdG9yZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICgh
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzTWFwID0g
bWVtb3J5U3RvcmUuZGF0YSgpOworICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3Rh
dGlzdGljc01hcCkKKyAgICAgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljLnZhbHVl
KTsKKworICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRp
b25zaGlwcyBzbyB3ZQorICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFi
bGUgZW50cmllcworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcCkKKyAg
ICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMudmFsdWUpOworCisgICAg
bV9kYXRhYmFzZS5ydW5WYWN1dW1Db21tYW5kKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRSgxOTUw
ODgpOiBJbXBsZW1lbnQgZm9yIERhdGFiYXNlIHZlcnNpb24uCit9CisKK3N0YXRpYyBTdHJpbmcg
ZG9tYWluc1RvU3RyaW5nKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5z
KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gZG9tYWluTmFt
ZSA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyInKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZG9tYWluTmFtZS5zdHJpbmcoKSk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNl
LCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92
ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgi
LCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbmNyZW1lbnRTdGF0aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWlu
c1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwgU3Rk
U2V0PHVuc2lnbmVkPiYgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25lZCBu
dW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPj0gbWF4TnVtYmVyT2ZSZWN1cnNp
dmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2spIHsKKyAgICAgICAgUkVMRUFTRV9MT0coUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgIkhpdCAldSByZWN1cnNpdmUgY2FsbHMgaW4gcmVkaXJlY3QgYmFj
a3RyYWNlLiBSZXR1cm5pbmcgZWFybHkuIiwgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVk
aXJlY3RUcmFjZUJhY2spOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsK
KyAgICB9CisgICAgCisgICAgKytudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisgICAgU3RkU2V0
PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5zOworICAgIFNRTGl0ZVN0YXRlbWVudCBm
aW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlu
cy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQg
V0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHByaW1hcnlEb21h
aW5JRCksICJBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCIpKTsKKyAgICBpZiAo
ZmluZFN1YnJlc291cmNlcy5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxl
IChmaW5kU3VicmVzb3VyY2VzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBh
dXRvIG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQoMCk7CisgICAg
ICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNl
cy5pbnNlcnQobmV3RG9tYWluSUQpOworICAgICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNv
bmQpCisgICAgICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9t
YWluSUQpOworICAgICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BG
cmFtZXMobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5O
RVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5J
RCA9ICIsIFN0cmluZzo6bnVtYmVyKHByaW1hcnlEb21haW5JRCksICJBTkQgT2JzZXJ2ZWREb21h
aW5zLmlzUHJldmFsZW50ID0gMCIpKTsKKyAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkg
PT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgICAgICBhdXRvIG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1l
cy5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblBy
ZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3RG9tYWluSUQpOworICAgICAgICAg
ICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICAgICAgbmV3bHlJZGVudGlm
aWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluSUQpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKG5ld2x5SWRlbnRpZmllZERvbWFpbnMuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHM7CisKKyAgICBmb3IgKGF1dG8gZG9tYWluSUQgOiBuZXdseUlkZW50
aWZpZWREb21haW5zKQorICAgICAgICBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID0gcmVjdXJzaXZl
bHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGRvbWFp
bklELCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIG51bWJlck9mUmVjdXJzaXZlQ2Fs
bHMpOworCisgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CitzdGF0aWMgU3RyaW5nIGJ1aWxkTGlzdChjb25zdCBX
VEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3JUeXBlPiYgdmFsdWVzKQoreworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gZG9tYWluSUQgOiB2YWx1ZXMpIHsKKyAgICAg
ICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoZG9tYWluSUQpOworICAg
IH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRU
b1ByZXZhbGVudCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBT
dGRTZXQ8dW5zaWduZWQ+IHByZXZhbGVudER1ZVRvUmVkaXJlY3Q7CisgICAgU1FMaXRlU3RhdGVt
ZW50IHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNU
SU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1YnJlc291cmNlRG9tYWluSUQgRlJP
TSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8udG9E
b21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYg
KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewor
ICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJl
c291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQgRlJP
TSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2Vy
dmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5J
RCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHRvcEZy
YW1lUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3
aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJlY3RT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
bWFya1ByZXZhbGVudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1
aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QuYmVnaW4oKSwgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQo
KSkpLCAiKSIpKTsKKyAgICBpZiAobWFya1ByZXZhbGVudFN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJXtw
dWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0hhc2hNYXA8dW5zaWduZWQsIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFz
aE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYg
KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9P
SykgeworICAgICAgICB3aGlsZSAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFsdWUo
eyBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWlu
U3RyaW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgx
KSkKKyAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNl
TG9hZFByZXZhbGVuY2U6OkxvdworICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKKyAg
ICAgICAgICAgIHJlc3VsdHMuYWRkKGtleSwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byB2YWx1ZSA6IHJlc3VsdHMu
a2V5cygpKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KHZhbHVlKTsKKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZGVy
LnRvU3RyaW5nKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAg
aWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWdu
ZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1
YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNP
ZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNR
TElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQg
IT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1
YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBk
b21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOwor
ICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQucHJlcGFy
ZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVl
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VM
RUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJl
c3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAg
ICAgICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5k
KGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDog
bm90VmVyeVByZXZhbGVudFJlc291cmNlcy52YWx1ZXMoKSkgeworICAgICAgICBhdXRvIG5ld1By
ZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291
cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3Vy
Y2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0
YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlz
dGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMucHJl
dmFsZW5jZSk7CisgICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3RhdGlzdGlj
LnByZXZhbGVuY2UpCisgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0
YXRpc3RpYy5yZWdpc3RlcmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOworICAgIH0KK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xhc3NpZnlQcmV2YWxl
bnRSZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGVu
c3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIG1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgcmVjbGFzc2lmeVJlc291cmNlcygp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3Rv
cmFnZUlmTmVlZGVkKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBt
X2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9kYXRhYmFzZS5ydW5WYWN1dW1Db21tYW5k
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0
b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQs
IFBhZ2VJRCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7
CisKKyAgICBzd2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJGcmFtZURvbWFpbikp
IHsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZToKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
b29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcDoKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJl
c3VsdDo6QWxsb3c6CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgYnJlYWs7CisgICAg
fTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKHN0b3Jl
KCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BG
cmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdl
SUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxl
cihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlE
LCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0
b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWlu
LCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlEIGZyYW1lSUQsIFBhZ2VJ
RCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9y
YWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisKKyAg
ICBzd2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJGcmFtZURvbWFpbikpIHsKKyAg
ICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTogeworICAgICAgICBS
RUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMg
c2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgYW5k
IGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBz
dWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpC
bG9ja0FuZEtlZXA6IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdF
bmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQg
c3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUgbm90IGJs
b2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NT
dGF0dXM6Okhhc0FjY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxvdzoKKyAgICAgICAgLy8gRG8gbm90aGluZworICAg
ICAgICBicmVhazsKKyAgICB9OworCisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyID0g
cHJvbXB0RW5hYmxlZCAmJiBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
KHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgIGlmIChwcm9tcHRF
bmFibGVkICYmICF1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3Rv
cmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31zIG9yIG5vdC4iLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vz
c1N0YXR1czo6UmVxdWlyZXNVc2VyUHJvbXB0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
U3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31z
LiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IGluY3JlbWVu
dFN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9t
YWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9
IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJF
IGRvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIoc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSkpOwor
ICAgIGlmIChpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgZ3JhbnRTdG9y
YWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJh
bWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCB3YXNHcmFu
dGVkQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRl
ZEFjY2VzcyA/IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nlc3NT
dGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2VzcywgT3BlbmVyUGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3BlbmVyRG9t
YWluKQoreworICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3BlbmVy
RG9tYWluKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChkb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPT0gb3BlbmVyRG9tYWluKQorICAgICAgICByZXR1cm47
CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpOworCisgICAgaWYgKGNvb2tpZVRyZWF0bWVudEZvck9y
aWdpbihkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpICE9IENvb2tpZVRyZWF0bWVudFJlc3Vs
dDo6QWxsb3cpCisgICAgICAgIHJldHVybjsKKworICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVi
dWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9y
YXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtw
dWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRl
cmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3Muc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoZG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJEb21haW4pLCBXVEY6Om51bGxvcHQs
IG9wZW5lclBhZ2VJRCwgZmFsc2UsIFtdKGJvb2wpIHsgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURv
bWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHVzZXJXYXNQcm9tcHRl
ZE5vdykgeworICAgICAgICBhdXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworICAgICAgICBBU1NF
UlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0gQWRkZWRSZWNvcmQ6Ok5vKTsKKyAgICAgICAgQVNT
RVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbikpOworICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQsIHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgIH0K
KworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4p
LCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0
ZWROb3csIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3Vi
RnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURv
bWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAo
c3ViRnJhbWVEb21haW4gPT0gdG9wRnJhbWVEb21haW4pIHsKKyAgICAgICAgY2FsbGJhY2sodHJ1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIG1fc3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBpcyBubyBsb25nZXIg
ZXhwZXJpbWVudGFsLgorICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIgJiYgc3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGF1
dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5m
aXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOworICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVy
YWN0aW9uKHN1YkZyYW1lRG9tYWluKSk7CisgICAgICAgIEFTU0VSVChoYXNVc2VyR3JhbnRlZFN0
b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVE
b21haW4pKTsKKyNlbmRpZgorICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21h
aW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgp
LCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlE
LCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3JhZ2VBY2Nl
c3NIYW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlE
LCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCld
KGJvb2wgdmFsdWUpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1
ZSgpLmRpc3BhdGNoKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB2YWx1ZV0gKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgIH0pOworCit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmco
ZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRh
dGFGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIWRlYnVnTW9k
ZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1hcnlEb21haW5zVG9CbG9j
ay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsK
KyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCks
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgIHByaW1hcnlEb21haW5zVG9CbG9j
ay51bmNoZWNrZWRBcHBlbmQoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKKworICAg
IGlmICghZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLmlzRW1wdHkoKSkgeworICAgICAg
ICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkpOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gp
OworICAgICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKSk7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCBy
ZXNvdXJjZSBmb3IgdGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIGRlYnVnTWFudWFs
UHJldmFsZW50UmVzb3VyY2UoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1l
RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBib29sIGlzUmVk
aXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBib29sIGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlID0gdGFy
Z2V0RG9tYWluID09IHRvcEZyYW1lRG9tYWluOworICAgIGJvb2wgYXJlVGFyZ2V0QW5kU291cmNl
RG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWluID09IHNvdXJjZURvbWFpbjsKKworICAgIGJv
b2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc01haW5GcmFtZSAm
JiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8IGFyZVRhcmdldEFuZFNv
dXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKKyAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwor
ICAgICAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOworCisgICAgICAgIGlm
ICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3Rz
LCB0YXJnZXRSZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICAgICAgICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHRh
cmdldFJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAgICAgICAgIHN0YXRpc3Rp
Y3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNSZWRp
cmVjdCAmJiAhYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSB7CisgICAgICAgIGlm
IChpc01haW5GcmFtZSkgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURv
bWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9FeGlzdHMsIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCwgdGFy
Z2V0RG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcCht
X3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29u
ZCwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQg
PSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFp
bik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3RvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbUV4aXN0cywgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKSkg
eworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKTsKKyAg
ICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJj
ZURvbWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMsIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29u
ZCwgdGFyZ2V0RG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZGlyZWN0aW5nRG9tYWluUmVz
dWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2Vy
ZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRhcmdl
dFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRh
cmdldERvbWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cywgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291
cmNlRG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcCht
X3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291
cmNlRG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXRpc3RpY3NX
ZXJlVXBkYXRlZCkKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
Zk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHRhcmdl
dERvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBs
YXN0U2VlbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8g
cmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFy
Z2V0RG9tYWluKTsKKyAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXREb21haW4sIGxhc3RTZWVuKTsK
KworICAgIGF1dG8gdGFyZ2V0RG9tYWluSUQgPSByZXN1bHQuc2Vjb25kOworICAgIGlmICghcmVs
YXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzLCB0
YXJnZXREb21haW5JRCwgdG9wRnJhbWVEb21haW4pKSB7CisgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHRhcmdldERvbWFp
bklELCB0b3BGcmFtZURvbWFpbik7CisgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJl
Y3RlZEZyb21Eb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiB0
YXJnZXREb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHNvdXJjZURvbWFpblJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7CisgICAgYXV0byB0YXJnZXREb21haW5SZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21h
aW4pOworCisgICAgYm9vbCBpc05ld1JlZGlyZWN0VG9FbnRyeSA9IGZhbHNlOworICAgIGlmICgh
cmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cywg
c291cmNlRG9tYWluUmVzdWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKSkgeworICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCBzb3Vy
Y2VEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pOworICAgICAgICBpc05ld1JlZGly
ZWN0VG9FbnRyeSA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBpc05ld1JlZGlyZWN0RnJvbUVu
dHJ5ID0gZmFsc2U7CisgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMsIHRhcmdldERvbWFpblJlc3VsdC5zZWNvbmQsIHNvdXJj
ZURvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tLCB0YXJnZXREb21haW5SZXN1bHQuc2Vjb25kLCBzb3VyY2VE
b21haW4pOworICAgICAgICBpc05ld1JlZGlyZWN0RnJvbUVudHJ5ID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoaXNOZXdSZWRpcmVjdFRvRW50cnkgfHwgaXNOZXdSZWRpcmVjdEZyb21FbnRyeSkK
KyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIFdhbGxUaW1lIG1vc3RSZWNlbnRJbnRlcmFjdGlvbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQuYmluZEludCgxLCBoYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHx8
IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5iaW5kRG91YmxlKDIsIG1vc3RS
ZWNlbnRJbnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZFRl
eHQoMywgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uLCBlcnJvciBtZXNzYWdlOiAle3B1
YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHJlc2V0
UmVzdWx0ID0gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOworICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIHRy
dWUsIFdhbGxUaW1lOjpub3coKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgZmFsc2UsIHsgfSk7
CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlU3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgZG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcih0YXJnZXRSZXN1bHQuc2Vjb25kKSkp
OworICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJy
b3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgaWYgKG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmRUZXh0
KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faGFkVXNlcklu
dGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9ICEhbV9oYWRVc2VySW50ZXJhY3Rp
b25TdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgIGlmICghaGFkVXNlckludGVyYWN0aW9u
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2FsbFRpbWUgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMobV9oYWRVc2VySW50
ZXJhY3Rpb25TdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDEpKTsKKworICAgIGlmIChoYXNTdGF0
aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkpIHsKKyAgICAgICAg
Ly8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQg
aXQuCisgICAgICAgIC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVy
Z2Ugd2lsbCBrbm93CisgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8g
aXRzIGRlZmF1bHQgLTEuCisgICAgICAgIGNsZWFyVXNlckludGVyYWN0aW9uKGRvbWFpbik7Cisg
ICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gaGFkVXNlckludGVyYWN0aW9uOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
bnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnJlc2V0
KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRF
X09LKTsKKworICAgIGlmIChuZXdQcmV2YWxlbmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OlZlcnlIaWdoKSB7CisgICAgICAgIGlmIChtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudC5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgbV91cGRh
dGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluLnN0cmlu
ZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZVZlcnlQ
cmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5yZXNldCgpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIH0KKworICAgIFN0
ZFNldDx1bnNpZ25lZD4gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzOworICAgIHJlY3Vy
c2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbihk
b21haW5JRChkb21haW4pLCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOworICAg
IHNldERvbWFpbnNBc1ByZXZhbGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291
cmNlcykpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRvbWFpbnMpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRM
aXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlu
cy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1Ymxp
Y31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitTdHJpbmcgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJ
WE1FKDE5NTA4OCk6IEltcGxlbWVudCBTUUxpdGUtYmFzZWQgZHVtcGluZyByb3V0aW5lcy4KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHByZWRpY2F0ZVN0YXRlbWVudCwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAKKyAgICBpZiAocHJlZGljYXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFp
bi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHByZWRpY2F0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZh
bHVlRm9yRG9tYWluIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCByZXN1bHQg
PSAhIXByZWRpY2F0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgaW50IHJlc2V0UmVz
dWx0ID0gcHJlZGljYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNl
dFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVG
b3JEb21haW4obV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCBkb21haW4pOworfQorCiti
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9y
RG9tYWluKG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisK
K2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21h
aW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlz
dHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIGRvbWFpbklEKHN1YnJl
c291cmNlRG9tYWluKSwgdG9wRnJhbWVEb21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3Qg
U3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluRXhpc3RzLCBkb21haW5JRChzdWJGcmFtZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKK30K
KworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRpcmVjdGVkRnJv
bURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9Eb21haW4pIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcmVs
YXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cywgZG9t
YWluSUQocmVkaXJlY3RlZEZyb21Eb21haW4pLCByZWRpcmVjdGVkVG9Eb21haW4pOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOworICAgIAorICAgIGlmIChtX2NsZWFyUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZSwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2NsZWFyUHJldmFsZW50UmVzb3Vy
Y2VTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNl
dFJlc3VsdCA9PSBTUUxJVEVfT0spOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4p
OworICAgIAorICAgIGlmIChtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQuYmluZEludCgx
LCB2YWx1ZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0
YXRlbWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0
YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVz
dWx0ID09IFNRTElURV9PSyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJu
IHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50LCBkb21h
aW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1l
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAg
IC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3Mg
ZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlc3VsdC5z
ZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1
YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4m
IHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ug
c3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRv
bWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
b3BGcmFtZURvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwor
CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlz
dGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCByZXN1
bHQuc2Vjb25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21h
aW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1h
a2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3Qg
ZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4p
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWlu
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIC8vIEZv
ciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkg
Zm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVzdWx0LnNlY29uZCwgcmVk
aXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4p
OworCisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3Rh
dGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJl
c3VsdC5zZWNvbmQsIHJlZGlyZWN0RG9tYWluKTsKK30KKworc3RkOjpwYWlyPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgdW5zaWduZWQ+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3Ry
aW5nU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8s
IDAgfTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gbV9k
b21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgICAgIGlu
dCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9P
Syk7CisgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgZG9tYWluSUQgfTsKKyAgICB9
CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5y
ZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNR
TElURV9PSyk7CisKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG5ld09ic2VydmF0aW9uKGRv
bWFpbik7CisgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4obmV3T2JzZXJ2YXRpb24pOworCisgICAg
cmV0dXJuIHsgQWRkZWRSZWNvcmQ6OlllcywgZG9tYWluSUQoZG9tYWluKSB9OworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBjbGVhck9wZXJhdGluZ0RhdGVzKCk7CisKKyAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKworICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNr
QWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CisKKyAgICBh
dXRvIHByaW1hcnlEb21haW5zVG9CbG9jayA9IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRl
YnVnTW9kZSgpOworICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhwcmltYXJ5RG9t
YWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29w
eVJlZigpXSB7IH0pOworfQorCitSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Q29va2llVHJlYXRtZW50UmVzdWx0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpjb29raWVUcmVhdG1lbnRGb3JPcmlnaW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFp
bikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIGlzUHJl
dmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSAiLCBkb21haW4uc3RyaW5nKCkpKTsKKyAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKSB7CisgICAgICAgIHJldHVybiBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkFsbG93
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzUHJldmFsZW50ID0gISFzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApOworICAgIGlmICghaXNQcmV2YWxlbnQpCisgICAgICAgIHJldHVybiBDb29raWVU
cmVhdG1lbnRSZXN1bHQ6OkFsbG93OworCisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpID8gdHJ1ZSA6IGZhbHNlOworICAgIHJldHVybiBoYWRV
c2VySW50ZXJhY3Rpb24gPyBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcCA6IENv
b2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTsKK30KKyAgICAKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vz
c1Rocm91Z2hQcm9tcHQodW5zaWduZWQgcmVxdWVzdGluZ0RvbWFpbklELCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9IGRv
bWFpbklEKGZpcnN0UGFydHlEb21haW4pOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJl
cihyZXF1ZXN0aW5nRG9tYWluSUQpLCAiIEFORCB0b3BMZXZlbERvbWFpbklEID0gIiwgU3RyaW5n
OjpudW1iZXIoZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkpKTsKKyAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCk7Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gcmVzdWx0czsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUg
aXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVDb29raWVCbG9j
a2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIGRvbWFpbnNUb0Jsb2Nr
ID0gdGhpcy0+ZG9tYWluc1RvQmxvY2soKTsKKworICAgIGlmIChkb21haW5zVG9CbG9jay5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkgJiYgIWRvbWFpbnNUb0Jsb2Nr
LmlzRW1wdHkoKSkKKyAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9jayIsIGRv
bWFpbnNUb0Jsb2NrKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgZG9tYWluc1Rv
QmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgc3Rv
cmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRv
bWFpbnNUb0Jsb2NrLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUgPSBzdG9y
ZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlz
cGF0Y2goW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRih3ZWFrVGhpcy0+ZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpQcmV2YWxlbnREb21haW5EYXRhPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJldmFsZW50RG9tYWlucygpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgVmVjdG9yPFByZXZhbGVudERvbWFp
bkRhdGE+IHJlc3VsdHM7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisg
ICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1
bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQorICAg
ICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LmdldENvbHVtbkRv
dWJsZSgyKSkKKyAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCgzKSA/IHRydWUg
OiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6
IGZhbHNlCisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0czsKK30K
KworVmVjdG9yPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVzdWx0czsKKyAgICBPcHRp
b25hbDxTZWNvbmRzPiBleHBpcmF0aW9uRGF0ZVRpbWUgPSBzdGF0aXN0aWNzRXBpcmF0aW9uVGlt
ZSgpOworICAgIGlmICghZXhwaXJhdGlvbkRhdGVUaW1lKQorICAgICAgICByZXR1cm4gcmVzdWx0
czsKKworICAgIGlmIChtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmRE
b3VibGUoMSwgZXhwaXJhdGlvbkRhdGVUaW1lLnZhbHVlKCkudmFsdWUoKSkgIT0gU1FMSVRFX09L
KQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgIHdoaWxlIChtX2ZpbmRFeHBpcmVkVXNl
ckludGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1
bHRzLmFwcGVuZChtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmdldENvbHVt
bkludCgwKSk7CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2ZpbmRFeHBpcmVkVXNlckludGVy
YWN0aW9uU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwg
cmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRVc2Vy
SW50ZXJhY3Rpb25zKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gZXhwaXJlZFJlY29yZHMgPSBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAg
ICBpZiAoZXhwaXJlZFJlY29yZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIGV4cGlyZWRSZWNvcmRJRHMgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rv
cjx1bnNpZ25lZD46Oml0ZXJhdG9yPihleHBpcmVkUmVjb3Jkcy5iZWdpbigpLCBleHBpcmVkUmVj
b3Jkcy5lbmQoKSkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyRXhwaXJlZEludGVyYWN0
aW9uKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gMCwgaGFkVXNlckludGVyYWN0aW9uID0gMSBX
SEVSRSBkb21haW5JRCBJTiAoIiwgZXhwaXJlZFJlY29yZElEcywgIikiKSk7CisgICAgaWYgKGNs
ZWFyRXhwaXJlZEludGVyYWN0aW9uLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJl
dHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJh
c2UsIG1ha2VTdHJpbmcoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyAiLCBleHBpcmVkUmVjb3JkSURzLCAiKSIpKTsKKyAgICBpZiAocmVtb3ZlU3RvcmFnZUFj
Y2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
Y2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24uc3RlcCgpICE9IFNRTElURV9ET05FCisgICAgICAgIHx8
IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3Nh
Z2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25l
ZD4mJiBkb21haW5JRHNUb0NsZWFyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKGRvbWFpbklEc1RvQ2xlYXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGxpc3RUb0NsZWFyID0gYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxW
ZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWluSURzVG9DbGVhci5iZWdpbigpLCBkb21h
aW5JRHNUb0NsZWFyLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRv
Q2xlYXIsICIpIikpOworICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJs
ZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IGVu
ZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKSA+IFdhbGxUaW1lOjpub3coKTsKKyAgICBib29s
IHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCk7CisKKyAgICBpZiAoc2hvdWxkQ2xl
YXJHcmFuZGZhdGhlcmluZykKKyAgICAgICAgY2xlYXJFbmRPZkdyYW5kZmF0aGVyaW5nVGltZVN0
YW1wKCk7CisKKyAgICBjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCk7CisgICAgCisgICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBwcmV2YWxlbnRSZXNvdXJjZXM7CisKKyAgICBWZWN0
b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcHJldmFsZW50RG9tYWlucyA9IHRoaXMtPnByZXZhbGVu
dERvbWFpbnMoKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZh
dGhlcmluZzsKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHByZXZhbGVudERvbWFpbnMpIHsK
KyAgICAgICAgaWYgKCFzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmICghc2hvdWxkQ2hl
Y2tGb3JHcmFuZGZhdGhlcmluZyB8fCAhc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQpKQorICAgICAg
ICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0ZXJhYmxlRG9t
YWluKTsKKworICAgICAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0
aWMuZ3JhbmRmYXRoZXJlZCkKKyAgICAgICAgICAgIGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhl
cmluZy5hcHBlbmQoc3RhdGlzdGljLmRvbWFpbklEKTsKKyAgICB9CisKKyAgICBjbGVhckdyYW5k
ZmF0aGVyaW5nKFdURk1vdmUoZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7CisgICAg
CisgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOwor
ICAgIGlmIChtX29ic2VydmVkRG9tYWluQ291bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIGNvdW50ID0gbV9vYnNlcnZlZERvbWFpbkNvdW50LmdldENvbHVtbkludCgwKTsKKworICAg
IGludCByZXNldFJlc3VsdCA9IG1fb2JzZXJ2ZWREb21haW5Db3VudC5yZXNldCgpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAg
ICBpZiAoY291bnQgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbyA8
PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpOworCisgICAgc2l6ZV90IGNvdW50
TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87Cisg
ICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHJlY29y
ZHNUb1BydW5lKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBs
YXN0U2VlbiBERVNDIExJTUlUICIsIFN0cmluZzo6bnVtYmVyKGNvdW50TGVmdFRvUHJ1bmUpKSk7
CisgICAgaWYgKHJlY29yZHNUb1BydW5lLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFZlY3Rvcjx1bnNpZ25lZD4gZW50cmllc1RvUHJ1bmU7CisgICAgd2hpbGUgKHJlY29yZHNUb1By
dW5lLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQo
cmVjb3Jkc1RvUHJ1bmUuZ2V0Q29sdW1uSW50KDApKTsKKworICAgIGF1dG8gbGlzdFRvUHJ1bmUg
PSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9y
PihlbnRyaWVzVG9QcnVuZS5iZWdpbigpLCBlbnRyaWVzVG9QcnVuZS5lbmQoKSkpOworCisgICAg
U1FMaXRlU3RhdGVtZW50IHBydW5lQ29tbWFuZChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJERUxF
VEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5l
LCAiKSIpKTsKKyAgICBpZiAocHJ1bmVDb21tYW5kLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgcHJ1bmVDb21tYW5kLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3VwZGF0ZUxhc3RTZWVuU3Rh
dGVtZW50LmJpbmREb3VibGUoMSwgbGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC5iaW5k
VGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0
ZUxhc3RTZWVuU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6dXBkYXRlTGFzdFNlZW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50
IHJlc2V0UmVzdWx0ID0gbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC5yZXNldCgpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWlu
LCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4p
OworICAgIHNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5j
ZTo6VmVyeUhpZ2gpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQyMGJjMzJlNTdkNDQ4OGFiM2QzNzU4NzRmNTUwY2VjYjlhNjQwZWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKKworI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FM
aXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNR
TGl0ZURhdGFiYXNlOworY2xhc3MgU1FMaXRlU3RhdGVtZW50Oworc3RydWN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CisKKy8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVk
IC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
J3Mgc3RhdGlzdGljcyBxdWV1ZS4KK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlIGZpbmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7CitwdWJs
aWM6CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1ZXVlJiwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGly
ZWN0b3J5UGF0aCk7CisKKyAgICB2b2lkIHBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYpOworCisgICAgdm9pZCBjbGVhcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVu
dFJlc291cmNlcygpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgpIG92
ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpIG92ZXJyaWRlOworCisg
ICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVk
RnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
Jikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiwgYm9vbCB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVy
ZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQg
c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29u
c3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1l
RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3Vi
UmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29u
c3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4m
KSBvdmVycmlkZTsKKworICAgIHZvaWQgY2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVE
b21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVx
dWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJh
bWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdh
dGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpIG92ZXJyaWRlOworICAg
IHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4m
LCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xlYXJV
c2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBi
b29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNl
Y29uZHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGJvb2wgaW5zZXJ0T2JzZXJ2ZWREb21h
aW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHZvaWQgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5zaWdu
ZWQgZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbik7Cisg
ICAgYm9vbCByZWxhdGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5z
aWduZWQgZmlyc3REb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFp
bikgY29uc3Q7CisgICAgdW5zaWduZWQgZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdDsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBjb25maXJtRG9tYWluRG9lc05vdEV4
aXN0KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisjZW5kaWYKKyAgICB2b2lkIHVw
ZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgV2FsbFRpbWUpOworICAgIHZv
aWQgc2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCBoYWRV
c2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IGRvbWFpbnNUb0Jsb2NrKCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgUHJldmFsZW50RG9tYWluRGF0
YSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEOworICAgICAgICBSZWdpc3RyYWJsZURvbWFp
biByZWdpc3RlcmFibGVEb21haW47CisgICAgICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lOworICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICAgICAg
Ym9vbCBncmFuZGZhdGhlcmVkOworICAgIH07CisgICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRh
dGE+IHByZXZhbGVudERvbWFpbnMoKSBjb25zdDsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGZpbmRF
eHBpcmVkVXNlckludGVyYWN0aW9ucygpIGNvbnN0OworICAgIHZvaWQgY2xlYXJFeHBpcmVkVXNl
ckludGVyYWN0aW9ucygpOworICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5z
aWduZWQ+JiYpOworICAgIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFBy
b21wdCh1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsK
KyAgICB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8
UmVnaXN0cmFibGVEb21haW4+JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWNsYXNzaWZ5UmVz
b3VyY2VzKCk7CisgICAgc3RydWN0IE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgeworICAgICAg
ICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RlcmFibGVEb21haW47CisgICAgICAgIFJlc291cmNl
TG9hZFByZXZhbGVuY2UgcHJldmFsZW5jZTsKKyAgICAgICAgdW5zaWduZWQgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50OworICAgICAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNDb3VudDsKKyAgICAgICAgdW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0NvdW50OworICAgIH07CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVu
dFJlc291cmNlcz4gZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKworICAgIGJvb2wg
cHJlZGljYXRlVmFsdWVGb3JEb21haW4oV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKworICAgIGVudW0gY2xhc3MgQ29va2llVHJlYXRt
ZW50UmVzdWx0IHsgQWxsb3csIEJsb2NrQW5kS2VlcCwgQmxvY2tBbmRQdXJnZSB9OworICAgIENv
b2tpZVRyZWF0bWVudFJlc3VsdCBjb29raWVUcmVhdG1lbnRGb3JPcmlnaW4oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CisgICAg
dW5zaWduZWQgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVk
VG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwgU3RkU2V0PHVuc2lnbmVkPiYg
bm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzKTsKKyAgICB2b2lkIHNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+
JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
OworICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVk
KCkgb3ZlcnJpZGU7CisgICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7IE5vLCBZZXMgfTsKKyAg
ICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHVuc2lnbmVkPiBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRl
RGF0YUZvcigpIG92ZXJyaWRlOworICAgIGJvb2wgaXNEYXRhYmFzZVN0b3JlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKKyAgICBib29s
IHByZXBhcmVTdGF0ZW1lbnRzKCk7CisgICAgCisgICAgY29uc3QgU3RyaW5nIG1fc3RvcmFnZURp
cmVjdG9yeVBhdGg7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fb2JzZXJ2ZWREb21h
aW5Db3VudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pbnNlcnRUb3BM
ZXZlbERvbWFpblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQ7CisgICAg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbzsKKyAg
ICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9FeGlzdHM7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnM7CisgICAgbXV0YWJsZSBXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHM7
CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluczsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIG11dGFibGUgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAg
ICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b207CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHM7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxl
IFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7
CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1faXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudCBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50Owor
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1faXNHcmFuZGZhdGhlcmVkU3Rh
dGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fZmluZEV4cGly
ZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzRGF0
YWJhc2VTdG9yZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcApp
bmRleCAxN2NhNTdmOGYxNGRhZmI3OGJhOGJjYWYwYjEyY2E5M2RiODUwM2E4Li41ODYxZGJhN2I3
NGFjOTk5ZTdhN2NkNWUwYzg4MDc5YmUxM2ZlNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcApAQCAtNDksOTQgKzQ5LDYgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogY29uc3RleHByIHVu
c2lnbmVkIHN0YXRpc3RpY3NNb2RlbFZlcnNpb24geyAxNSB9OwotY29uc3RleHByIHVuc2lnbmVk
IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKLWNv
bnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9z
IH07Ci1jb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OwotY29u
c3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFuY2UgeyAzIH07Ci0KLSNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKLXN0YXRpYyBTdHJpbmcgZG9tYWluc1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAg
ICAgICBidWlsZGVyLmFwcGVuZChkb21haW4uc3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOwotfQotI2VuZGlmCi0KLWNsYXNzIE9wZXJhdGluZ0RhdGUgewot
cHVibGljOgotICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBzdGF0aWMgT3Bl
cmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKLSAgICB7Ci0gICAgICAgIGRv
dWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMoKTsKLSAgICAg
ICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgICAgIGludCB5ZWFyRGF5ID0gZGF5SW5Z
ZWFyKG1zLCB5ZWFyKTsKLSAgICAgICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKHll
YXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotICAgICAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1v
bnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLQotICAgICAgICBy
ZXR1cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OwotICAgIH0KLQot
ICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIHRvZGF5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBP
cGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAg
ICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERh
eSkgKiBzZWNvbmRzUGVyRGF5IH07Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbW9u
dGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYg
bV95ZWFyID09IG90aGVyLm1feWVhcjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPChjb25z
dCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZWNv
bmRzU2luY2VFcG9jaCgpIDwgb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICB9Ci0KLSAg
ICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2lu
Y2VFcG9jaCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFy
LCBpbnQgbW9udGgsIGludCBtb250aERheSkKLSAgICAgICAgOiBtX3llYXIoeWVhcikKLSAgICAg
ICAgLCBtX21vbnRoKG1vbnRoKQotICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCi0gICAg
eyB9Ci0KLSAgICBpbnQgbV95ZWFyIHsgMCB9OwotICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBb
MCwgMTFdLgotICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgotfTsKLQotc3Rh
dGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYg
bmV3RGF0ZXMpCi17Ci0gICAgaWYgKGV4aXN0aW5nRGF0ZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gV1RGTW92ZShuZXdEYXRlcyk7Ci0KLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVy
Z2VkRGF0ZXMoZXhpc3RpbmdEYXRlcy5zaXplKCkgKyBuZXdEYXRlcy5zaXplKCkpOwotCi0gICAg
Ly8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBkYXRlcy4KLSAgICBzdGQ6Om1lcmdl
KGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0ZXMuYmVn
aW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJlZ2luKCkpOwotICAgIC8vIFJlbW92
ZSBkdXBsaWNhdGUgZGF0ZXMuCi0gICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJnZWREYXRl
cyk7Ci0KLSAgICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hl
cyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KLSAgICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4g
b3BlcmF0aW5nRGF0ZXNXaW5kb3cpCi0gICAgICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKLQot
ICAgIHJldHVybiBtZXJnZWREYXRlczsKLX0KIAogc3RydWN0IFN0YXRpc3RpY3NMYXN0U2VlbiB7
CiAgICAgUmVnaXN0cmFibGVEb21haW4gZG9tYWluOwpAQCAtMTU1LDM2ICs2NywyNCBAQCBzdGF0
aWMgdm9pZCBwcnVuZVJlc291cmNlcyhIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPiYgcwogICAgICAgICBzdGF0aXN0aWNzTWFwLnJlbW92ZShzdGF0aXN0
aWNzVG9QcnVuZVtpXS5kb21haW4pOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9y
dGFuY2UoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCi17
Ci0gICAgdW5zaWduZWQgaW1wb3J0YW5jZSA9IG1heEltcG9ydGFuY2U7Ci0gICAgaWYgKCFyZXNv
dXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICBpbXBvcnRhbmNlIC09
IDE7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAg
ICAgIGltcG9ydGFuY2UgLT0gMjsKLSAgICByZXR1cm4gaW1wb3J0YW5jZTsKLX0KLQogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3
b3JrUXVldWUpCi0gICAgOiBtX3N0b3JlKHN0b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1
ZXVlKQorICAgIDogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKLSAgICBpbmNs
dWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwogCi0gICAgbV93b3JrUXVldWUt
PmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAg
ICB3b3JrUXVldWUuZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0gewogICAgICAgICBpZiAod2Vha1RoaXMpCiAgICAgICAgICAgICB3ZWFrVGhpcy0+Y2Fs
Y3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7CiAgICAgfSk7CiB9CiAKLVJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgp
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNFbXB0eSgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgcmV0dXJuIG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNldFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZSYgcGVyc2lzdGVudFN0b3JhZ2UpCkBAIC0xOTYsNzkgKzk2LDE2
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkpCisgICAgaWYg
KHBhcmFtZXRlcnMoKS5zaG91bGRTdWJtaXRUZWxlbWV0cnkpCiAgICAgICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7CiB9CiAK
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0
VGVsZW1ldHJ5ID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jcmVtZW50
UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgewotICAg
ICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIoKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0
b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkKLSAgICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuYWRk
KHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOwotI2VuZGlmCi0KLSAgICBhdXRvIHByZXZh
bGVudFJlc291cmNlRG9tYWlucyA9IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURh
dGFGb3IoKTsKLSAgICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgewot
ICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiBkb21h
aW4gOiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgeworICAgICAgICBhdXRvJiBzdGF0
aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW4pOworICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiAgICAgfQotCi0j
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVn
TG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJl
bW92ZSBkYXRhIHJlY29yZHMgZm9yICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZh
bGVudFJlc291cmNlRG9tYWlucykudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIHNldERh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKHRydWUpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50
UmVzb3VyY2VEb21haW5zKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHdlYWtUaGlzLT5tX3N0b3Jl
LmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0
YVN0b3JlcyhXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBl
cygpLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29w
eVJlZigpXShjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1dpdGhEZWxl
dGVkV2Vic2l0ZURhdGEpIG11dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRj
aChbZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlu
c1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3
ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgewot
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSB3ZWFrVGhpcy0+ZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICAgICAgICAg
ICAgICAgICAgKytzdGF0aXN0aWMuZGF0YVJlY29yZHNSZW1vdmVkOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQo
ZmFsc2UpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0jaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECi0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9k
ZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHJl
bW92aW5nIGRhdGEgcmVjb3Jkcy4iKTsKLSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwogfQogCiB1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0Rv
bWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5z
aWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3QKQEAgLTMyOSw1MyArMTY2LDQwIEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJ
Zkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVuCiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjppc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHJlc291cmNlU3RhdGlzdGljKQogewotICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQor
ICAgIGlmICghZGVidWdNb2RlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gbV9kZWJ1Z1N0
YXRpY1ByZXZhbGVudFJlc291cmNlIHx8IHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9t
YWluID09IG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKKyAgICByZXR1cm4gcmVzb3Vy
Y2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNv
dXJjZSgpIHx8IHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluID09IGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2Vz
KCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChtX3BhcmFt
ZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpIHsK
LSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoaXNQcmV2YWxlbnREdWVUb0RlYnVn
TW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCi0gICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVz
b3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJl
c291cmNlKSB7Ci0gICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVk
VG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOwotICAgICAgICAgICAgICAgIGF1dG8gY3Vy
cmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID8g
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6Okxv
dzsKLSAgICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0
YXRpc3RpYywgY3VycmVudFByZXZhbGVuY2UpOwotICAgICAgICAgICAgICAgIGlmIChuZXdQcmV2
YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQotICAgICAgICAgICAgICAgICAgICBzZXRQcmV2
YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7Ci0gICAgICAg
ICAgICB9CisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChpc1ByZXZhbGVudER1ZVRvRGVidWdN
b2RlKHJlc291cmNlU3RhdGlzdGljKSkKKyAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNl
KHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICAg
ICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSB7
CisgICAgICAgICAgICBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChy
ZXNvdXJjZVN0YXRpc3RpYyk7CisgICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNlID0g
cmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7CisgICAgICAgICAgICBh
dXRvIG5ld1ByZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxl
bmNlKHJlc291cmNlU3RhdGlzdGljLCBjdXJyZW50UHJldmFsZW5jZSk7CisgICAgICAgICAgICBp
ZiAobmV3UHJldmFsZW5jZSAhPSBjdXJyZW50UHJldmFsZW5jZSkKKyAgICAgICAgICAgICAgICBz
ZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7CiAg
ICAgICAgIH0KICAgICB9Cit9CiAKLSAgICByZW1vdmVEYXRhUmVjb3JkcyhbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICht
X3BlcnNpc3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2No
ZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpObyk7Ci0KLSAgICAgICAgaWYgKCFtX3BhcmFt
ZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMs
IHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldKCkgewotICAgICAgICAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5
bmNTdG9yYWdlSWZOZWVkZWQoKQoreworICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAg
ICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6
Ok5vKTsKK30KIAotICAgICAgICAgICAgbV9zdG9yZS5ub3RpZnlSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUHJvY2Vzc2VkKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKQoreworICAgIGlm
IChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hl
ZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Olllcyk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1l
RG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3Vi
RnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJh
bWVEb21haW4sIE9wdGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTM5MCw3ICsyMTQsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHN1YkZyYW1lRG9tYWluID0g
c3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVE
b21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc3ViRnJhbWVEb21haW4g
PSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBzdG9y
ZS0+Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVEb21haW4sIHRv
cEZyYW1lRG9tYWluLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgW3N0b3JlID0gc3RvcmUuY29w
eVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShi
b29sIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVl
KCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHJlc3VsdF0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIocmVzdWx0KTsKQEAgLTM5OSwxNCArMjIzLDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
CiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpy
ZXF1ZXN0U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBS
ZWdpc3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
dG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURv
bWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBG
cmFtZUlEIGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byYgc3Vi
RnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJGcmFtZURvbWFpbik7CiAgICAgaWYgKHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVz
KHN1YkZyYW1lU3RhdGlzdGljKSkgewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGlj
fXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMg
YW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4i
LCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFT
RV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNl
IGl0cyBjb29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGFuZCBpdCBo
YXMgbm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24gYXMgZmlyc3QtcGFydHkuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTQxNCw3ICsyMzgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4m
JgogCiAgICAgaWYgKCFzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGlj
KSkgewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
Tm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBj
b29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFt
ZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
Ik5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMg
Y29va2llcyBhcmUgbm90IGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDIzLDEzICsyNDcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYKICAgICBh
dXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBwcm9tcHRFbmFibGVkICYmIGhhc1VzZXJHcmFu
dGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0aXN0aWMsIHRvcEZyYW1l
RG9tYWluKTsKICAgICBpZiAocHJvbXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21wdGVkRWFybGll
cikgewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
QWJvdXQgdG8gYXNrIHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2Ug
YWNjZXNzIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwgc3ViRnJhbWVE
b21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5h
YmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVz
ZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9
cyB1bmRlciAle3B1YmxpY31zIG9yIG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRp
ZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJl
c1VzZXJQcm9tcHQpOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIGlmICh1c2VyV2FzUHJv
bXB0ZWRFYXJsaWVyKSB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVB
U0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVy
ICV7cHVibGljfXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9w
RnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVi
bGljfXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVE
b21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTQ0MCw3
ICsyNjQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVz
dFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJgogICAgIH0pOwogfQogCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRl
ck9wZW5lcihSZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcywg
dWludDY0X3Qgb3BlbmVyUGFnZUlELCBSZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbikK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcywgT3BlbmVyUGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWlu
JiYgb3BlbmVyRG9tYWluKQogewogICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MgIT0gb3BlbmVyRG9tYWluKTsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAg
LTQ1NiwxMiArMjgwLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFJlZ2lzdHJhCiAgICAgICAgIHJldHVy
bjsKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFJFTEVBU0VfTE9HX0lORk9fSUYo
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVt
cG9yYXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3Ig
JXtwdWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBp
bnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VB
Y2Nlc3Muc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgp
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJhdGliaWxpdHkg
Zml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtwdWJsaWN9cyB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3Bl
bmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAg
ICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MpLCBXVEZNb3ZlKG9wZW5lckRvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVyUGFn
ZUlELCBmYWxzZSwgW10oYm9vbCkgeyB9KTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1
YkZyYW1lRG9tYWluLCBSZWdpc3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFt
ZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWlu
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVk
Tm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00NzMsNyArMjk3LDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vz
cyhSZWdpc3RyYWJsZURvbWFpbiYmIHMKICAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChX
VEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQs
IHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3Jh
Z2VBY2Nlc3NJbnRlcm5hbChSZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBSZWdp
c3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFt
ZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWlu
LCBPcHRpb25hbDxGcmFtZUlEPiBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBib29sIHVzZXJXYXNQ
cm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxs
YmFjaykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNDgzLDE0ICsz
MDcsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFJlZ2lzdHJhYmxlRG8KICAgICB9CiAKICAgICAvLyBGSVhNRTog
UmVtb3ZlIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBp
cyBubyBsb25nZXIgZXhwZXJpbWVudGFsLgotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVh
cmxpZXIgJiYgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpIHsKKyAgICBpZiAodXNlcldh
c1Byb21wdGVkTm93T3JFYXJsaWVyICYmIHN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCgpKSB7
CiAgICAgICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOwogICAgICAgICBBU1NFUlQo
c3ViRnJhbWVTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKTsKICAgICAgICAgQVNTRVJUKHN1
YkZyYW1lU3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucy5jb250YWlu
cyh0b3BGcmFtZURvbWFpbikpOwogICAgICAgICBzdWJGcmFtZVN0YXRpc3RpYy5tb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKTsKICAgICB9CiAKLSAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3N1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5
KCksIGZyYW1lSUQsIHBhZ2VJRCwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9w
RnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFn
ZUlELCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKCkgbXV0YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFu
ZGxlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHN0b3JlID0gc3RvcmUuY29weVJlZigpXShib29s
IHZhbHVlKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgdmFsdWVdICgpIG11dGFibGUg
ewogICAgICAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlKTsKQEAgLTQ5OSwxMDUgKzMyMywzOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNj
ZXNzSW50ZXJuYWwoUmVnaXN0cmFibGVEbwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtR
dWV1ZS5jb3B5UmVmKCksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIHN0b3JlLT5yZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFr
VGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1
ZS5jb3B5UmVmKCldIChIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRoV2Vi
c2l0ZURhdGEpIG11dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vh
a1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSA9IGNyb3Nz
VGhyZWFkQ29weShkb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgewot
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkb21h
aW4gOiBkb21haW5zV2l0aFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8m
IHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOwotICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMuZ3JhbmRm
YXRoZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtU
aGlzLT5tX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3
ZWFrVGhpcy0+bV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsKLSAgICAgICAgICAgICAg
ICBpZiAod2Vha1RoaXMtPm1fcGVyc2lzdGVudFN0b3JhZ2UpCi0gICAgICAgICAgICAgICAgICAg
IHdlYWtUaGlzLT5tX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9y
ZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRl
V3JpdGU6Olllcyk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICB3ZWFrVGhpcy0+bG9nVGVzdGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRv
bWFpbnMpIHsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICAgICAgc3RhdGlzdGljLmdyYW5k
ZmF0aGVyZWQgPSB0cnVlOworICAgIH0KIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpCiB7Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCisgICAgaWYg
KCFkZWJ1Z01vZGVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrOwogICAgIGRvbWFpbnNUb0Jsb2NrLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CiAKLSAgICBhdXRvJiBzdGF0aWNTZXNvdXJjZVN0YXRp
c3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVi
dWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgYXV0byYgc3RhdGljU2Vzb3VyY2VTdGF0
aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1
Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwogICAgIHNldFByZXZhbGVudFJlc291cmNlKHN0
YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAg
ICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlKTsKKyAgICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdTdGF0aWNQ
cmV2YWxlbnRSZXNvdXJjZSgpKTsKIAotICAgIGlmICghbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiBtYW51YWxSZXNvdXJjZVN0YXRpc3Rp
YyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgaWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlz
dGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2Uo
bWFudWFsUmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwot
ICAgICAgICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKyAgICAgICAgZG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSk7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
RGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCByZXNvdXJjZSBmb3IgdGhlIHB1cnBvc2Vz
IG9mIElUUCBEZWJ1ZyBNb2RlLiIsIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291
cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZGVidWdNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgfQog
ICAgIAogICAgIHJldHVybiBkb21haW5zVG9CbG9jazsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
Ym9vbCBlbmFibGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBSRUxFQVNFX0xP
R19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlR1cm5lZCBJVFAgRGVidWcgTW9k
ZSBvbi4iKTsKLSNlbmRpZgotCi0gICAgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5hYmxlOwotICAg
IG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKLQotICAgIGVuc3VyZVByZXZhbGVudFJl
c291cmNlc0ZvckRlYnVnTW9kZSgpOwotICAgIC8vIFRoaXMgd2lsbCBsb2cgdGhlIGN1cnJlbnQg
Y29va2llIGJsb2NraW5nIHN0YXRlLgotICAgIGlmIChlbmFibGUpCi0gICAgICAgIHVwZGF0ZUNv
b2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pCi17Ci0gICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlID0gZG9tYWluOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKyttX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyOwotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKG1pbmlt
dW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSAqbV9w
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcl0gewotICAgICAgICBp
ZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghbV9wZW5k
aW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB8fCAqbV9wZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciAhPSBzdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHJlcXVlc3QgaGFzIGJl
ZW4gY2FuY2VsZWQuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1
cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0gICAgICAgIHByb2Nlc3NTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3Qo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9IFdURjo6bnVsbG9wdDsKLX0KLQog
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VE
b21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTYzNSw3ICszOTIsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYQogICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVj
ZXNzYXJ5KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjps
b2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFp
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0
U2VlbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNv
dXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNjQ1LDcgKzQwMiw3IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmco
Y29uc3QgUmVnaXN0cmFibGVECiAgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0SWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbikKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGly
ZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiBzb3VyY2VEb21haW4sIGNvbnN0IFJlZGly
ZWN0ZWRUb0RvbWFpbiYgdGFyZ2V0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCkBAIC02NTgsNyArNDE1LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVnaXN0cmFibGUKICAg
ICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwog
fQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1l
RG9tYWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAg
LTcyOCw3ICs0ODUsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibAogICAgIHJldHVybiBtYXBF
bnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnkt
PnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgbWFwRW50cnktPnZhbHVlLmlzVmVyeVByZXZh
bGVudFJlc291cmNlOwogfQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9t
YWluKSBjb25zdAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVz
b3VyY2VEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzM2LDcgKzQ5Myw3IEBA
IGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1
YnJlc291cmNlVW5kZXIoY29uc3QgUmVnCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucy5jb250YWlucyh0b3BGcmFtZURvbWFpbik7CiB9CiAKLWJv
b2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Citib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0
IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRv
cEZyYW1lRG9tYWluKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CkBAIC03NDQsNyArNTAxLDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBSZWdpc3QKICAgICByZXR1cm4g
bWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVu
dHJ5LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1l
RG9tYWluKTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omlz
UmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJl
Y3RlZEZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdGVkVG9Eb21h
aW4pIGNvbnN0Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRpcmVj
dGVkRnJvbURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9Eb21h
aW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc3Nyw3
ICs1MzQsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJgogICAgIHJldHVybiBtYXBFbnRyeSA9
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVl
LmdyYW5kZmF0aGVyZWQ7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCkBAIC03ODcsNyArNTQ0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25z
dCBSZWcKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
b3BGcmFtZURvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJh
bWVEb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJy
ZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKQog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03OTcsNyArNTU0LDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdAogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VE
b21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3RE
b21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgwNyw3ICs1
NjQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZwogICAgIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21h
aW4mIHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CkBAIC04MTcsNyArNTc0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFIKICAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04
MjcsNyArNTg0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3QKICAgICBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBU
b3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRp
cmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODM3
LDk1ICs1OTQsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaQogICAgIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMudGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMubWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNv
bmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNT
RVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1Rp
bWUgPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3Bh
cmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lID0gc2Vjb25kczsKLSAgICB1cGRhdGVDYWNoZU1h
eEFnZUNhcCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIAotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1f
c3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZV0gKCkgewot
ICAgICAgICBzdG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXAoc2Vjb25kcywgW10geyB9KTsKLSAgICB9
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEFnZUNh
cEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotICAgIAotICAg
IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgPSBzZWNvbmRzOwotICAg
IHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVz
QWdlQ2FwVGltZV0gKCkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBzdG9y
ZS0+bmV0d29ya1Nlc3Npb24oKSkKLSAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5uZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKS5zZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhzZWNvbmRzKTsK
LSAgICB9KTsKLSNlbmRpZgotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
ICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmds
ZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghbV9hY3RpdmVQbHVnaW5U
b2tlbnMuY29udGFpbnMocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiAhbV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQgfHwgTW9ub3RvbmljVGltZTo6bm93KCkgPj0gKG1fbGFzdFRp
bWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sIHZhbHVlKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9kYXRhUmVjb3Jkc0JlaW5nUmVt
b3ZlZCA9IHZhbHVlOwotICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQotICAgICAg
ICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwotfQotCiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC05NDEsMTMgKzYwOSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNv
ZGVyPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNyZWF0ZUVuY29kZXJGcgog
CiAgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7CiAgICAgZW5jb2Rl
ci0+ZW5jb2RlVUludDMyKCJ2ZXJzaW9uIiwgc3RhdGlzdGljc01vZGVsVmVyc2lvbik7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgbV9l
bmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7
CisgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1w
IiwgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFs
dWUoKSk7CiAKICAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3Mi
LCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5iZWdpbigpLCBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVySW5uZXIsIGNvbnN0IGF1dG8mIGRvbWFp
bikgewogICAgICAgICBkb21haW4udmFsdWUuZW5jb2RlKGVuY29kZXJJbm5lcik7CiAgICAgfSk7
CiAKLSAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJvcGVyYXRpbmdEYXRlcyIsIG1fb3BlcmF0
aW5nRGF0ZXMuYmVnaW4oKSwgbV9vcGVyYXRpbmdEYXRlcy5lbmQoKSwgW10oS2V5ZWRFbmNvZGVy
JiBlbmNvZGVySW5uZXIsIE9wZXJhdGluZ0RhdGUgZGF0ZSkgeworICAgIGF1dG8mIG9wZXJhdGlu
Z0RhdGVzID0gdGhpcy0+b3BlcmF0aW5nRGF0ZXMoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVPYmpl
Y3RzKCJvcGVyYXRpbmdEYXRlcyIsIG9wZXJhdGluZ0RhdGVzLmJlZ2luKCksIG9wZXJhdGluZ0Rh
dGVzLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJbm5lciwgT3BlcmF0aW5nRGF0ZSBk
YXRlKSB7CiAgICAgICAgIGVuY29kZXJJbm5lci5lbmNvZGVEb3VibGUoImRhdGUiLCBkYXRlLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTk2OSw5ICs2MzgsOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWVyZ2VXaXRoRGF0YUZy
b21EZWNvZGVyKEtleWVkRGVjb2RlciYgZAogCiAgICAgZG91YmxlIGVuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXA7CiAgICAgaWYgKGRlY29kZXIuZGVjb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0
aGVyaW5nVGltZXN0YW1wIiwgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCkpCi0gICAgICAg
IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25k
cyhlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKTsKKyAgICAgICAgc2V0RW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcChXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wID0geyB9OworICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3Rh
bXAoKTsKIAogICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0
aWNzOwogICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2lu
Z1N0YXRpc3RpY3MiLCBsb2FkZWRTdGF0aXN0aWNzLCBbdmVyc2lvbk9uRGlza10oS2V5ZWREZWNv
ZGVyJiBkZWNvZGVySW5uZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsK
QEAgLTk5Nyw3ICs2NjYsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6bWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKEtleWVkRGVjb2RlciYgZAogICAgIGlmICghc3Vj
Y2VlZGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX29wZXJhdGluZ0RhdGVzID0gbWVyZ2VP
cGVyYXRpbmdEYXRlcyhtX29wZXJhdGluZ0RhdGVzLCBXVEZNb3ZlKG9wZXJhdGluZ0RhdGVzKSk7
CisgICAgbWVyZ2VPcGVyYXRpbmdEYXRlcyhXVEZNb3ZlKG9wZXJhdGluZ0RhdGVzKSk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGVhcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMDA1LDcgKzY3NCw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGVhcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxlCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAgIG1fb3BlcmF0aW5n
RGF0ZXMuY2xlYXIoKTsKKyAgICBjbGVhck9wZXJhdGluZ0RhdGVzKCk7CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIApAQCAtMTA1NiwzOSArNzI1LDYgQEAgYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQKICAgICByZXR1cm4gc3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1l
RG9tYWlucy5jb250YWlucyhmaXJzdFBhcnR5RG9tYWluKTsKIH0KIAotc3RhdGljIHZvaWQgZGVi
dWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKLXsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBzdGF0aWMgY29uc3QgYXV0byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVu
dCA9IDUwOwotICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVt
ZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRz
IGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IGJhdGNoOwotICAgIGJhdGNoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpOwotICAgIGF1dG8gYmF0Y2hOdW1i
ZXIgPSAxOwotICAgIHVuc2lnbmVkIG51bWJlck9mQmF0Y2hlcyA9IHN0ZDo6Y2VpbChkb21haW5z
LnNpemUoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0
YXRlbWVudCkpOwotCi0gICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAg
IGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQp
IHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRz
IGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJl
ciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgYmF0Y2guc2hyaW5rKDApOwotICAgICAgICAgICAgKytiYXRjaE51bWJl
cjsKLSAgICAgICAgfQotICAgICAgICBiYXRjaC5hcHBlbmQoZG9tYWluKTsKLSAgICB9Ci0gICAg
aWYgKCFiYXRjaC5pc0VtcHR5KCkpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJk
LXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0
aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gp
LnV0ZjgoKS5kYXRhKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWN0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oZG9tYWlucyk7Ci0jZW5kaWYKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKQEAgLTExMDQsNTIgKzc0MCwyMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fZGVidWdMb2dnaW5nRW5hYmxlZCAm
JiAhZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKQorICAgIGlmIChkZWJ1Z0xvZ2dpbmdFbmFibGVk
KCkgJiYgIWRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkKICAgICAgICAgZGVidWdMb2dEb21haW5z
SW5CYXRjaGVzKCJibG9jayIsIGRvbWFpbnNUb0Jsb2NrKTsKIAotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxv
Y2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBt
dXRhYmxlIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIGRvbWFpbnNUb0Jsb2NrID0g
Y3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxs
VXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9C
bG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlID0gc3RvcmUuY29weVJl
ZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3
ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBjb29raWUgYmxvY2tp
bmcuIik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+ZGVi
dWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVw
ZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsKICNlbmRpZgogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0pOwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwg
ZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JI
YW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsK
LSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbnMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zKV0gewotICAgICAg
ICBzdG9yZS0+Y2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGRvbWFpbnMpOwotICAgIH0pOwotCi0g
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKSBjb25zdAogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTE3OCwxMSArNzg1LDExIEBAIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpy
ZWdpc3RyYWJsZURvbWFpbnNUCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
LSAgICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBtX2VuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXAgPiBXYWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdy
YW5kZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgbV9lbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wOworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhl
cmluZyA9IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKSA+IFdhbGxUaW1lOjpub3coKTsK
KyAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCk7CiAKICAgICBpZiAo
c2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKLSAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wID0geyB9OworICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3Rh
bXAoKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJldmFsZW50UmVzb3VyY2Vz
OwogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFs
dWVzKCkpIHsKQEAgLTExOTYsNjIgKzgwMywxNiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVAog
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2Fy
eSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRvZGF5
ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAoIW1fb3BlcmF0aW5nRGF0ZXMuaXNF
bXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0
ZXNXaW5kb3cpCi0gICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOwotCi0gICAgbV9v
cGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpIHsKLSAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxs
VGltZShyZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkgPCBt
X29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFsIGNyaXRlcmlhIGZvciBhbiBleHBp
cmVkIHN0YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGluZyBmb3IgYSB0aWdodGVyIHJlc3Ry
aWN0aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpLgotICAgIGlmIChtX3BhcmFtZXRlcnMudGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICBpZiAoV2FsbFRpbWU6Om5vdygpID4gcmVz
b3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBtX3BhcmFtZXRl
cnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1h
eGltdW1FbnRyeUNvdW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvID0g
cHJ1bmVUYXJnZXRDb3VudDsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPD0g
bV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgIGlmIChtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5zaXplKCkgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rv
d25UbyA8PSBtX3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMpOworICAgIEFTU0VSVChw
YXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvIDw9IHBhcmFtZXRlcnMoKS5tYXhTdGF0aXN0
aWNzRW50cmllcyk7CiAKLSAgICBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVz
RG93blRvOworICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnNpemUoKSAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87
CiAgICAgQVNTRVJUKG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKIAogICAgIFZlY3RvcjxT
dGF0aXN0aWNzTGFzdFNlZW4+IHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW21heEltcG9y
dGFuY2UgKyAxXTsKQEAgLTEyNjQsMjIgKzgyNSw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiAgICAgQVNTRVJUKCFu
dW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wYXJhbWV0ZXJzID0geyB9Owot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVGVzdGluZ0V2
ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0
b3JlKSwgZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBzdG9yZS0+bG9n
VGVzdGluZ0V2ZW50KGV2ZW50KTsKLSAgICB9KTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIFNlY29uZHMgc2Vjb25kcykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKQEAgLTEzMDQsMjcgKzg0OSw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiAgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVu
Y2U6OlZlcnlIaWdoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5
UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2go
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsK
LSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVz
QWdlQ2FwKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAppbmRleCBlMzExNzdh
MTJhOTgyODc3YTAwZWIwNjQ0NjMxOWMzM2FjZjE5YjM3Li5jYTFkOTJhZGVjYzBjNGQ1MGU3ZTlj
ZDM0MmQ1NmQxNDFjNWEwZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTcgKzI3LDEzIEBACiAKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIK
ICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlIDx3
dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKLSNpZiBIQVZF
KENPUkVfUFJFRElDVElPTikKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllckNvY29hLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgS2V5ZWRE
ZWNvZGVyOwogY2xhc3MgS2V5ZWRFbmNvZGVyOwpAQCAtNDYsMzUgKzQyLDE5IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgT3Bl
cmF0aW5nRGF0ZTsKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZTsKIAogLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9u
IHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgot
Y2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIDogcHVibGljIENhbk1ha2VX
ZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4geworY2xhc3MgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIGZpbmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgdXNpbmcgUmVnaXN0cmFi
bGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBUb3BGcmFt
ZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFN1YkZyYW1l
RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgU3ViUmVzb3Vy
Y2VEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVj
dERvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0
ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVk
aXJlY3RlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcg
TmF2aWdhdGVkRnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVz
aW5nIE5hdmlnYXRlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAg
dXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Ci0gICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW47Ci0gICAgdXNpbmcgT3BlbmVyUGFnZUlEID0gdWludDY0X3Q7Ci0gICAgdXNpbmcgUGFnZUlE
ID0gdWludDY0X3Q7Ci0gICAgdXNpbmcgRnJhbWVJRCA9IHVpbnQ2NF90OwotCiAgICAgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSYsIFdvcmtRdWV1ZSYpOwotICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUo
KTsKIAogICAgIHZvaWQgc2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlJik7CiAKLSAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgY29uc3QgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rl
cj4gY3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBtZXJnZVdpdGhEYXRh
RnJvbURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7CkBAIC04MiwxNDcgKzYyLDgxIEBA
IHB1YmxpYzoKICAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4mJik7CiAgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2
b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKIAotICAgIHZvaWQg
dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2
b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNsZWFy
QmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KLSAgICB2b2lkIGluY2x1ZGVUb2RheUFz
T3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzKCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVu
ZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9t
YWluJiYpOwotICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNhbmNlbFBlbmRpbmdTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIGlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0
IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1l
VW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0
OwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRG
cm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBj
bGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3Jh
Z2VJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJik7Ci0gICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nl
c3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgT3BlbmVyUGFnZUlE
LCBPcGVuZXJEb21haW4mJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKLSAgICBib29sIGlzR3JhbmRm
YXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIHZvaWQgZ3JhbmRm
YXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYpIG92
ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOwotICAgIHZvaWQgc2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29u
c3QgVG9wRnJhbWVEb21haW4mKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0g
ICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFp
biYpOwotICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJh
bWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOworICAgIGJvb2wgaXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJh
bWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3Qg
UmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworICAg
IHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92
ZXJyaWRlOworICAgIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGlt
dW1FbnRyeUNvdW50KTsKLSAgICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1
bmVUYXJnZXRDb3VudCk7Ci0gICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
KTsKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBi
b29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKSBjb25zdDsKKyAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BG
cmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7Ci0gICAgdm9p
ZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29s
KTsKLSAgICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sKTsKLSAgICB2b2lkIHNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKGJvb2wpOwotICAgIGJvb2wgaXNEZWJ1Z01vZGVFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIGNh
bGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBo
YXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKTsKLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYs
IFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAgICB2b2lk
IGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBG
cmFtZUlELCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJh
bWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQg
cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwg
RnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhbnRTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBh
Z2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2
aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZy
b21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpOwotICAgIHZvaWQg
bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBsb2dT
dWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKTsKLSAgICB2b2lkIGxvZ1N1YnJlc291cmNlUmVk
aXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21h
aW4mKTsKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0RvbWFp
biYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGJv
b2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92ZXJyaWRlOworICAgIHZvaWQgbG9n
U3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclVzZXJJbnRlcmFj
dGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIGJvb2wgaGFzSGFkVXNlckludGVy
YWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCBjbGVhclVzZXJJbnRl
cmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIGJvb2wgaGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcyk7
Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICBjb25zdCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9zdG9y
ZTsgfQorICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNv
bmRzKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0Fu
ZEtlZXBDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICBzdGF0aWMg
Ym9vbCBzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik7CiAgICAgc3RhdGljIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3Vn
aFByb21wdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKTsKICAgICBib29sIGhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7Ci0gICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhw
aXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7CiAgICAgYm9vbCB3YXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHVwZGF0
ZWQpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFp
bnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZSk7CiAgICAgdW5zaWduZWQgcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVS
ZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBIYXNo
U2V0PFJlZGlyZWN0ZWRUb0RvbWFpbj4mLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxz
KSBjb25zdDsKLSAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAg
IGJvb2wgc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldERlYnVn
TG9nZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0g
ZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7Ci0g
ICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7
CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBU
b3BGcmFtZURvbWFpbiYmLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBib29sIHVzZXJXYXNQ
cm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAg
ICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgYm9vbCBpc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVu
c3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwotICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICB2b2lkIHBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJh
YmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKLSAgICB2b2lkIHNldENhY2hlTWF4
QWdlQ2FwKFNlY29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLSAgICB2
b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMpOwotICAgIHZvaWQgdXBk
YXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOwotI2VuZGlmCisgICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRh
Rm9yKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQorCiAKLSAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7Ci0gICAgICAgIHNpemVf
dCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKLSAgICAgICAgc2l6ZV90IG1heFN0YXRpc3Rp
Y3NFbnRyaWVzIHsgMTAwMCB9OwotICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uOwotICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCB7IDFfaCB9OwotICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGlt
ZSB7IDI0X2ggKiA3IH07Ci0gICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBUaW1lIHsgMjRf
aCAqIDcgfTsKLSAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgeyAy
NF9oICogNyB9OwotICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OwotICAgICAgICBib29sIHNob3Vs
ZFN1Ym1pdFRlbGVtZXRyeSB7IHRydWUgfTsKLSAgICB9OwotCi0gICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJiBtX3N0b3JlOwotICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVl
OwogICAgIFdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBt
X3BlcnNpc3RlbnRTdG9yYWdlOwogICAgIEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwotI2lmIEhBVkUoQ09S
RV9QUkVESUNUSU9OKQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2Eg
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKLSNlbHNlCi0gICAgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXIgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
cjsKLSNlbmRpZgotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEhhc2hTZXQ8
dWludDY0X3Q+IG1fYWN0aXZlUGx1Z2luVG9rZW5zOwotI2VuZGlmCi0gICAgUGFyYW1ldGVycyBt
X3BhcmFtZXRlcnM7Ci0gICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7
Ci0gICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOwotICAgIGJvb2wg
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGVidWdNb2RlRW5h
YmxlZCB7IGZhbHNlIH07Ci0gICAgY29uc3QgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1Z1N0YXRp
Y1ByZXZhbGVudFJlc291cmNlIHsgVVJMIHsgVVJMKCksICJodHRwczovLzNyZHBhcnR5dGVzdHdl
YmtpdC5vcmciX3MgfSB9OwotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1fZGVidWdNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgeyBmYWxzZSB9Owot
ICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQ7Ci0KLSAg
ICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHsg
MCB9OwotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSkgeyByZXR1cm4gc3RvcmUuaXNNZW1vcnlTdG9yZSgp
OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjkyMzI0NTVmNjVl
Yzg2ODg0MzdhYzE3ODMyYjgwYmQwYmY3MzRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAKQEAgLTAsMCArMSw1NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisKKyNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIK
KyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3Rh
dHVzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0aWNz
UHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5n
RGF0ZXNXaW5kb3cgeyAzMCB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitzdGF0aWMg
U3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGRv
bWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoZG9tYWluLnN0cmluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKK30KKyNlbmRpZgorCitPcGVyYXRpbmdEYXRlIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGlt
ZShXYWxsVGltZSB0aW1lKQoreworICAgIGRvdWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNlRXBv
Y2goKS5taWxsaXNlY29uZHMoKTsKKyAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAgICBp
bnQgeWVhckRheSA9IGRheUluWWVhcihtcywgeWVhcik7CisgICAgaW50IG1vbnRoID0gbW9udGhG
cm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOworICAgIGludCBtb250aERh
eSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwor
CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwgbW9udGhEYXkgfTsKK30K
KworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpCit7CisgICAgcmV0dXJuIE9w
ZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkpOworfQorCitTZWNvbmRz
IE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkp
ICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0o
Y29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9udGhE
YXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYgbV95
ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwo
Y29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNT
aW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOworfQorCitib29sIE9wZXJh
dGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIuc2Vjb25kc1NpbmNlRXBv
Y2goKTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1
ZXVlJiB3b3JrUXVldWUpCisgICAgOiBtX3N0b3JlKHN0b3JlKQorICAgICwgbV93b3JrUXVldWUo
d29ya1F1ZXVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKK30KKworUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKK30KKwordW5zaWduZWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5jZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICB1bnNpZ25lZCBpbXBvcnRhbmNlID0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXhJbXBvcnRhbmNlOworICAgIGlmICghcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAx
OworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAg
ICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJuIGltcG9ydGFuY2U7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFs
dWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJz
LnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsID0gdmFsdWU7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRU
ZWxlbWV0cnkoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5ID0gdmFsdWU7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAoIXNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkpIHsKKyAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQorICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmNsZWFyKCk7CisgICAg
Zm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9u
KCkucGx1Z2luUHJvY2Vzc2VzKCkpCisgICAgICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChw
bHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsKKyNlbmRpZgorCisgICAgYXV0byBwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnMgPSByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRh
Rm9yKCk7CisgICAgaWYgKHByZXZhbGVudFJlc291cmNlRG9tYWlucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFi
bGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byByZW1vdmUgZGF0YSBy
ZWNvcmRzIGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0cmluZyhwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKKyAgICBzZXREYXRhUmVjb3Jkc0Jl
aW5nUmVtb3ZlZCh0cnVlKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KHByZXZhbGVudFJlc291cmNlRG9t
YWlucyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0g
bV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQs
IHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3ZWFrVGhpcy0+bV9zdG9yZS5kZWxldGVXZWJz
aXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgV1RGTW92
ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0oY29u
c3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVE
YXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW2RvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNXaXRoRGVsZXRl
ZFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBX
VEZNb3ZlKHdlYWtUaGlzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5pbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhXVEZNb3ZlKGRvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPnNldERh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygp
OworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJlY29yZHMuIik7CisjZW5kaWYKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fcGFyYW1ldGVycy5z
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCkKKyAgICAgICAg
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICAKKyAgICByZW1vdmVEYXRhUmVjb3Jk
cyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldICgpIG11dGFibGUgeworICAg
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgp
OworICAgICAgICBzeW5jU3RvcmFnZUlmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX3BhcmFt
ZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMs
IHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldIHsKKyAgICAgICAgICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgbV9zdG9yZS5ub3RpZnlSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUHJvY2Vzc2VkKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHNob3Vs
ZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hv
dWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93
b3JrUXVldWUuY29weVJlZigpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSldICgpIG11dGFibGUg
eworICAgICAgICBzdG9yZS0+cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIHNob3VsZE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3b3JrUXVldWUgPSB3b3Jr
UXVldWUuY29weVJlZigpXSAoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zV2l0
aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2go
W3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEgPSBj
cm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5n
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpOworICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxs
VGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsK
KyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpOworICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmxvZ1Rl
c3RpbmdFdmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
aWYgKGVuYWJsZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJUdXJuZWQgSVRQIERlYnVnIE1vZGUgb24uIik7CisjZW5kaWYKKworICAgIG1f
ZGVidWdNb2RlRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgPSBl
bmFibGU7CisKKyAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAg
ICAvLyBUaGlzIHdpbGwgbG9nIHRoZSBjdXJyZW50IGNvb2tpZSBibG9ja2luZyBzdGF0ZS4KKyAg
ICBpZiAoZW5hYmxlKQorICAgICAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIG1f
ZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWZOZWNlc3NhcnkoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
bV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICsrbV9sYXN0
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBtX3dvcmtRdWV1ZS0+
ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50
aWZpZXJdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgIT0g
c3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikgeworICAgICAgICAgICAgLy8g
VGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOworICAgICAg
ICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSBXVEY6Om51
bGxvcHQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJh
bWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPSBzZWNvbmRzOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJzLm1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9IHNlY29uZHM7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VS
VChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1l
ID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJz
LmNhY2hlTWF4QWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAo
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNhY2hlTWF4
QWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25k
cyA9IG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVdICgpIHsKKyAgICAgICAgc3RvcmUt
PnNldENhY2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2ll
cyhTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKyAgICAKKyAgICBtX3BhcmFtZXRlcnMuY2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1cGRhdGVDbGllbnRTaWRlQ29v
a2llc0FnZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBk
YXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9
IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWVdICgpIHsKKyAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5ldHdvcmtTZXNzaW9uKCkpCisgICAg
ICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc2V0QWdlQ2Fw
Rm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7CisgICAgfSk7CisjZW5kaWYKK30KKworYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX2Rh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBs
dWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkgeworICAg
ICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luUHJv
Y2Vzc1Rva2VuKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHx8IE1vbm90b25p
Y1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG1fcGFy
YW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1f
ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAgICBpZiAobV9kYXRhUmVjb3Jkc0Jl
aW5nUmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IAorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0Zv
ckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorICAgIAorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWlu
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtl
UmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpXSB7CisgICAg
ICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoZG9tYWlucyk7CisgICAgfSk7CisK
KyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCitPcHRpb25hbDxTZWNvbmRzPiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCkgY29uc3QKK3sK
KyAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pCisgICAgICAg
IHJldHVybiBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIG1fcGFyYW1ldGVy
cy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCk7CisgICAgCisgICAgaWYgKG1fb3Bl
cmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQorICAgICAgICByZXR1
cm4gbV9vcGVyYXRpbmdEYXRlcy5maXJzdCgpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgCisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworVmVjdG9yPE9wZXJhdGluZ0RhdGU+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBWZWN0b3I8
T3BlcmF0aW5nRGF0ZT4mIGV4aXN0aW5nRGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5l
d0RhdGVzKQoreworICAgIGlmIChleGlzdGluZ0RhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUobmV3RGF0ZXMpOworICAgIAorICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBt
ZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUoKSArIG5ld0RhdGVzLnNpemUoKSk7CisgICAg
CisgICAgLy8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBkYXRlcy4KKyAgICBzdGQ6
Om1lcmdlKGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0
ZXMuYmVnaW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJlZ2luKCkpOworICAgIC8v
IFJlbW92ZSBkdXBsaWNhdGUgZGF0ZXMuCisgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJn
ZWREYXRlcyk7CisgICAgCisgICAgLy8gRHJvcCBvbGQgZGF0ZXMgdW50aWwgdGhlIFZlY3RvciBz
aXplIHJlYWNoZXMgb3BlcmF0aW5nRGF0ZXNXaW5kb3cuCisgICAgd2hpbGUgKG1lcmdlZERhdGVz
LnNpemUoKSA+IG9wZXJhdGluZ0RhdGVzV2luZG93KQorICAgICAgICBtZXJnZWREYXRlcy5yZW1v
dmUoMCk7CisgICAgCisgICAgcmV0dXJuIG1lcmdlZERhdGVzOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VPcGVyYXRpbmdEYXRlcyhWZWN0b3I8T3BlcmF0aW5n
RGF0ZT4mJiBuZXdEYXRlcykKK3sKKyAgICBtX29wZXJhdGluZ0RhdGVzID0gbWVyZ2VPcGVyYXRp
bmdEYXRlcyhtX29wZXJhdGluZ0RhdGVzLCBXVEZNb3ZlKG5ld0RhdGVzKSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJ
Zk5lY2Vzc2FyeSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKKyAgICBpZiAoIW1fb3BlcmF0aW5n
RGF0ZXMuaXNFbXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOwor
CisgICAgbV9vcGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgCisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJh
dGluZ0RhdGVzV2luZG93KSB7CisgICAgICAgIGlmIChPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRp
bWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgbV9vcGVyYXRpbmdEYXRlcy5maXJz
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIElmIHdl
IGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGljLCBj
aGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5seSBm
b3IgdGVzdGluZykuCisgICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKSB7CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGlj
c0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291cmNlU3RhdGlz
dGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVt
RW50cnlDb3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1f
cGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50OworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCBwcnVuZVRhcmdldENvdW50KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0
Q291bnQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFt
ZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgbV9wYXJhbWV0ZXJzID0geyB9OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHko
KV0geworICAgICAgICBzdG9yZS0+bG9nVGVzdGluZ0V2ZW50KGV2ZW50KTsKKyAgICB9KTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nl
c3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+cmVtb3ZlQWxs
U3RvcmFnZUFjY2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBz
dG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHVwZGF0
ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwor
ICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciog
YWN0aW9uLCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQoreworI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXRpYyBjb25zdCBhdXRvIG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50ID0gNTA7CisgICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51
bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lO
Rk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29r
aWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRv
bWFpbnNUb1N0cmluZyhkb21haW5zKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGJhdGNoOworICAgIGJh
dGNoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0
ZW1lbnQpOworICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOworICAgIHVuc2lnbmVkIG51bWJlck9m
QmF0Y2hlcyA9IHN0ZDo6Y2VpbChkb21haW5zLnNpemUoKSAvIHN0YXRpY19jYXN0PGZsb2F0Piht
YXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkpOworICAgIAorICAgIGZvciAoYXV0
byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBpZiAoYmF0Y2guc2l6ZSgpID09IG1heE51
bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xP
R19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMg
Y29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAl
e3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWlu
c1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJhdGNoLnNocmlu
aygwKTsKKyAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7CisgICAgICAgIH0KKyAgICAgICAgYmF0
Y2guYXBwZW5kKGRvbWFpbik7CisgICAgfQorICAgIGlmICghYmF0Y2guaXNFbXB0eSgpKQorICAg
ICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVi
bGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9m
QmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRvbWFpbnMpOworI2Vu
ZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmU3YjYzNjhjZjM0MTgyZTdj
MDdjNzcyM2FjMmRiYTQzZDVlMTA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBA
IC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+CisKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgS2V5ZWREZWNvZGVyOworY2xhc3MgS2V5ZWRFbmNvZGVyOworc3RydWN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CisKK2NsYXNzIE9wZXJhdGlu
Z0RhdGUgeworcHVibGljOgorICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7CisgICAgCisg
ICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgZnJvbVdhbGxUaW1lKFdhbGxUaW1lKTsKKyAgICBzdGF0
aWMgT3BlcmF0aW5nRGF0ZSB0b2RheSgpOworICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2go
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBj
b25zdDsKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9u
dGgsIGludCBtb250aERheSkKKyAgICAgICAgOiBtX3llYXIoeWVhcikKKyAgICAgICAgLCBtX21v
bnRoKG1vbnRoKQorICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCisgICAgeyB9CisKKyAg
ICBpbnQgbV95ZWFyIHsgMCB9OworICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgor
ICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgorfTsKKworLy8gVGhpcyBpcyBh
bHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZT4geworcHVibGljOgorICAgIHVzaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworICAgIHVzaW5nIFJlZ2lzdHJhYmxl
RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgVG9wRnJhbWVE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBTdWJGcmFtZURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFN1YlJlc291cmNl
RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgUmVkaXJlY3RE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBSZWRpcmVjdGVk
RnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFJlZGly
ZWN0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE5h
dmlnYXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2lu
ZyBOYXZpZ2F0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVz
aW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluOworICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OworICAgIHVzaW5nIE9wZW5lclBhZ2VJRCA9IHVpbnQ2NF90OworICAgIHVzaW5nIFBhZ2VJRCA9
IHVpbnQ2NF90OworICAgIHVzaW5nIEZyYW1lSUQgPSB1aW50NjRfdDsKKyAgICAKKyAgICB2aXJ0
dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbXB0eSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb29raWVCbG9j
a2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKKyAgICB2b2lkIHVwZGF0ZUNv
b2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKworICAgIHZvaWQgaW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHByb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1N0b3JhZ2VJZk5l
ZWRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYm
KSA9IDA7CisgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZHVtcFJlc291
cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZh
bHVlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRSZWNv
cmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9w
RnJhbWVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJl
Y3REb21haW4mKSA9IDA7CisKKyAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcm
KTsKKworICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRy
eUNvdW50KTsKKyAgICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJn
ZXRDb3VudCk7CisgICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAg
ICBPcHRpb25hbDxTZWNvbmRzPiBzdGF0aXN0aWNzRXBpcmF0aW9uVGltZSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0ID0gMDsK
KworICAgIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29s
KTsKKyAgICB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwor
ICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKKyAgICB2b2lk
IHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKKyAgICB2
b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKKyAgICB2b2lkIHNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7CisgICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH07CisgICAgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwor
CisgICAgdmlydHVhbCB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJ
RCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFjY2Vzc1N0YXR1cyk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2
aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZy
b21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3Rl
ZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcykgPSAwOworCisgICAgdm9p
ZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOworCisgICAgY29uc3QgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7IH0KKworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKKworICAgIHZp
cnR1YWwgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNEYXRhYmFzZVN0b3JlKCljb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBzdGF0aWMgVmVjdG9yPE9wZXJh
dGluZ0RhdGU+IG1lcmdlT3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+
JiBleGlzdGluZ0RhdGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcyk7CisgICAg
c3RhdGljIHZvaWQgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwg
Y29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucyk7CisKKyAgICBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29y
a1F1ZXVlJik7CisKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKFdh
bGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSBjb25zdDsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyNlbmRp
ZgorICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2Fy
eSgpOworICAgIHZvaWQgbWVyZ2VPcGVyYXRpbmdEYXRlcyhWZWN0b3I8T3BlcmF0aW5nRGF0ZT4m
Jik7CisgICAgdmlydHVhbCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVu
dFJlc291cmNlc0ZvckRlYnVnTW9kZSgpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSA9IDA7CisKKyAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgeyByZXR1cm4gbV9zdG9y
ZTsgfQorICAgIFJlZjxXb3JrUXVldWU+JiB3b3JrUXVldWUoKSB7IHJldHVybiBtX3dvcmtRdWV1
ZTsgfQorI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyQ29jb2EmIGNsYXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyOyB9CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyJiBjbGFzc2lmaWVyKCkgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllcjsgfQorI2VuZGlmCisKKyAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7CisgICAgICAg
IHNpemVfdCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKKyAgICAgICAgc2l6ZV90IG1heFN0
YXRpc3RpY3NFbnRyaWVzIHsgMTAwMCB9OworICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1l
VG9MaXZlVXNlckludGVyYWN0aW9uOworICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFfaCB9OworICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVy
aW5nVGltZSB7IDI0X2ggKiA3IH07CisgICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBUaW1l
IHsgMjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcFRp
bWUgeyAyNF9oICogNyB9OworICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIHNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OworICAgICAgICBib29s
IHNob3VsZFN1Ym1pdFRlbGVtZXRyeSB7IHRydWUgfTsKKyAgICB9OworICAgIGNvbnN0IFBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBj
b25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIG9wZXJhdGluZ0RhdGVzKCkgY29uc3QgeyByZXR1
cm4gbV9vcGVyYXRpbmdEYXRlczsgfQorICAgIHZvaWQgY2xlYXJPcGVyYXRpbmdEYXRlcygpIHsg
bV9vcGVyYXRpbmdEYXRlcy5jbGVhcigpOyB9CisgICAgV2FsbFRpbWUmIGVuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXAoKSB7IHJldHVybiBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7
IH0KKyAgICBjb25zdCBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQorICAgIHZvaWQg
c2V0RW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcChjb25zdCBXYWxsVGltZSYgZ3JhbmRmYXRo
ZXJpbmdUaW1lKSB7IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IGdyYW5kZmF0aGVy
aW5nVGltZTsgfQorICAgIHZvaWQgY2xlYXJFbmRPZkdyYW5kZmF0aGVyaW5nVGltZVN0YW1wKCkg
eyBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07IH0KKyAgICBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsgfQorICAgIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlOyB9CisgICAgYm9vbCBkZWJ1Z0xvZ2dpbmdF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkOyB9OworICAgIGJv
b2wgZGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsg
fQorICAgIGJvb2wgc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQ7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1
MCB9OworCitwcml2YXRlOgorICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVk
KGJvb2wgZW5hYmxlZCkgeyBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCAgPSBlbmFibGVk
OyB9CisgICAgYm9vbCBzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OworICAgIHZvaWQg
c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVidWdMb2dnaW5nRW5h
YmxlZCAgPSBlbmFibGVkOyB9CisgICAgdm9pZCBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChi
b29sKTsKKyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgdm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzKTsKKyAgICB2b2lkIHVw
ZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdm9pZCBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29v
a2llcyhTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7
CisKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7CisgICAgUmVm
PFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyOworI2Vsc2UKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllciBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOworI2VuZGlmCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgSGFzaFNldDx1aW50NjRfdD4gbV9hY3RpdmVQ
bHVnaW5Ub2tlbnM7CisjZW5kaWYKKyAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKKyAgICBW
ZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsKKyAgICBXYWxsVGltZSBtX2Vu
ZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CisgICAgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQ7CisgICAgdWludDY0X3QgbV9sYXN0U3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAgfTsKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gbV9w
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgeyBVUkwgeyBV
UkwoKSwgImh0dHBzOi8vM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyJfcyB9IH07CisgICAgYm9vbCBt
X2RlYnVnTG9nZ2luZ0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFi
bGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5ZjdlOGYwYTIw
ZGFmZWE5YWIyOWU2MDcwNzhlZjE1N2ZiMmJiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlQ29jb2EubW0KQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKworI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisKKyNpbXBvcnQgPFdlYkNvcmUvUmVn
aXN0cmFibGVEb21haW4uaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVk
ZWQoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3QgaW5pdE9uY2U7CisKKyAgICBkaXNw
YXRjaF9vbmNlKCZpbml0T25jZSwgXnsKKyAgICAgICAgU2Vjb25kcyB0aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZv
cktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIl0p
OworICAgICAgICBpZiAodGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA+IDBfcyAmJiB0aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uIDw9IDI0X2ggKiAzMCkKKyAgICAgICAgICAgIHNldFRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24odGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik7CisKKyAgICAgICAg
U2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCJdKTsKKyAgICAgICAg
aWYgKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA+IDBfcyAmJiBtaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPCAxX2gpCisgICAgICAgICAgICBzZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKTsKKworICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGltZShbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIl0pOworICAgICAgICBpZiAoZ3JhbmRm
YXRoZXJpbmdUaW1lID4gMF9zICYmIGdyYW5kZmF0aGVyaW5nVGltZSA8PSAyNF9oICogNykKKyAg
ICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5nVGltZShncmFuZGZhdGhlcmluZ1RpbWUpOworCisg
ICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkl0cERlYnVnTW9kZSJdKTsKKyAg
ICAgICAgYXV0byogZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIkl0cE1hbnVhbFByZXZhbGVu
dFJlc291cmNlIl07CisgICAgICAgIGlmIChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKSB7
CisgICAgICAgICAgICBVUkwgdXJsIHsgVVJMKCksIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UgfTsKKyAgICAgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoImh0dHA6Ly8iKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICAgICAgICAgICAgICB1cmwgPSB7IFVSTCgpLCBi
dWlsZGVyLnRvU3RyaW5nKCkgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1cmwu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKFJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0pOworICAgICAgICB9CisKKyAgICAgICAgU2Vj
b25kcyBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2FjaGVNYXhBZ2VDYXAiXSk7CisgICAgICAgIGlmIChjYWNoZU1heEFnZUNhcEZvclByZXZh
bGVudFJlc291cmNlcyA+IDBfcyAmJiBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyA8PSAyNF9oICogMzY1KQorICAgICAgICAgICAgc2V0Q2FjaGVNYXhBZ2VDYXAoY2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOworICAgICAgICAKKyAgICAgICAgU2Vjb25kcyBj
bGllbnRTaWRlQ29va2llc0FnZUNhcChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXAiXSk7CisgICAgICAgIGlmIChjbGllbnRTaWRlQ29va2llc0FnZUNhcCA+IDBfcyAm
JiBjbGllbnRTaWRlQ29va2llc0FnZUNhcCA8PSAyNF9oICogMzY1KQorICAgICAgICAgICAgc2V0
QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOworICAg
IH0pOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAppbmRleCA2NTVkMTFlOWI1YzZjYWRhN2M5YjUyNTM2OWM0ZmU1Y2E4
NDJmZGYwLi4zNzEzZjliMTcxYzFiNTE5ODA5NzcyZjFiMDkyMWIxNTI3Yjc5MTZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKQEAg
LTQ4LDYgKzQ5LDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Nh
bGxiYWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtODYsOCArOTAsOCBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChibwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBw
b3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQodmFsdWUpOwogICAgIH0pOwogfQogCkBAIC05Niw5ICsxMDAsOSBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChibwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAg
cG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQodmFsdWUpOwotICAgICAgICAKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3Jl
KQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOworCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTA4LDggKzExMiw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUp
Ci0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NT
dG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiAKICAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC0xMjAsOCAr
MTI0LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1
Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnko
dmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KHZhbHVlKTsKICAgICB9KTsK
IH0KIApAQCAtMTQxLDEzICsxNDUsMjIgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoTmV0d29ya1Nlc3Npb24mIG4KICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeS5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBtX21lbW9yeVN0b3JlID0gc3RkOjptYWtl
X3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRp
c3RpY3NRdWV1ZSk7Ci0gICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4oKm1fbWVtb3J5U3Rv
cmUsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsK
KyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUgPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqdGhp
cywgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOwor
CisgICAgICAgICAgICBhdXRvIG1lbW9yeVN0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSk7Cisg
ICAgICAgICAgICBhdXRvIHBlcnNpc3RlbnRTdG9yZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbWVtb3J5U3RvcmUsIG1fc3RhdGlz
dGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsKKworICAgICAgICAg
ICAgZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRp
c3RpY3NTdG9yZS5nZXQoKSkucG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoKm1lbW9yeVN0b3JlKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0
YXRpc3RpY3NRdWV1ZSk7CisgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+KGRvd25j
YXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3Jl
KSwgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOwor
ICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUUoMTkzMjk3KTogVGhpcyBzaG91bGQgYmUgcmV2
aXNlZCBhZnRlciB0aGUgVUlQcm9jZXNzIHZlcnNpb24gZ29lcyBhd2F5LgotICAgICAgICBtX21l
bW9yeVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOworICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB9KTsKLSAgICAKKwogICAg
IG1fZGFpbHlUYXNrc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwogfQogCkBAIC0xNzYsNyAr
MTg5LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVz
dHJveVBlcnNpc3RlbnRTdG9yZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IAotICAgIGlmICghbV9wZXJzaXN0ZW50U3RvcmFnZSAmJiAhbV9tZW1vcnlTdG9yZSkKKyAgICBp
ZiAoIW1fcGVyc2lzdGVudFN0b3JhZ2UgJiYgIW1fc3RhdGlzdGljc1N0b3JlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZGVzdHJveSB0aGUgcGVyc2lzdGVudCBzdG9y
ZSBvbiB0aGUgYmFja2dyb3VuZCBxdWV1ZSBhbmQgd2FpdCBmb3IgaXQgdG8gZGllCkBAIC0xODYs
NyArMTk5LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5k
RGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCiAgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsK
ICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goWyZzZW1hcGhvcmUsIHRoaXNdIHsKICAg
ICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbWVtb3J5U3Rv
cmUgPSBudWxscHRyOworICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZSA9IG51bGxwdHI7CiAgICAg
ICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKICAgICBzZW1hcGhvcmUud2FpdCgpOwpA
QCAtMTk3LDggKzIxMCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsCiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlz
dGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTIwOCw4ICsyMjEsOCBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgUmVnaQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShkb21haW4pOworICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0yMTksOCArMjMy
LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHMoKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7
CiB9CkBAIC0yMzgsMTcgKzI1MSwxOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNvcgogICAgIC8v
IGNvbWluZyBmcm9tIElQQy4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBvbmx5IGNvbnRhaW5zIHN0
cmluZ3Mgd2hpY2ggYXJlIHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcKICAg
ICAvLyBhcyBub2JvZHkgb24gdGhpcyB0aHJlYWQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhvc2Ug
c3RyaW5ncy4KICAgICBwb3N0VGFzayhbdGhpcywgb3JpZ2lucyA9IFdURk1vdmUob3JpZ2lucyld
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKCFt
X3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
PigqbV9zdGF0aXN0aWNzU3RvcmUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1f
bWVtb3J5U3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICAgICAg
YXV0byYgbWVtb3J5U3RvcmUgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7CisgICAgCisgICAgICAgIG1lbW9yeVN0b3JlLm1l
cmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKIAogICAgICAgICAvLyBXZSBjYW4gY2Fu
Y2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgdG8gcHJvY2VzcyBzdGF0aXN0aWNzIHNpbmNlIHdlJ3Jl
IGRvaW5nIGl0IHN5bmNocm9ub3VzbHkgYmVsb3cuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmNh
bmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKyAgICAgICAgbWVtb3J5
U3RvcmUuY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwogCiAgICAg
ICAgIC8vIEZpcmUgYmVmb3JlIHByb2Nlc3Npbmcgc3RhdGlzdGljcyB0byBwcm9wYWdhdGUgdXNl
ciBpbnRlcmFjdGlvbiBhcyBmYXN0IGFzIHBvc3NpYmxlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3Mu
Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsK
LSAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcygp
OworICAgICAgICBtZW1vcnlTdG9yZS51cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Cisg
ICAgICAgIG1lbW9yeVN0b3JlLnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKICAg
ICB9KTsKIH0KIApAQCAtMjU4LDE3ICsyNzMsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHMK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1
YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9t
YWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNz
U3RvcmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aGFzU3RvcmFnZUFjY2Vz
cyhzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgaGFzU3RvcmFn
ZUFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBoYXNTdG9yYWdlQWNjZXNzXSgp
IG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VB
Y2Nlc3MpOworCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgeworICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZy
YW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VBY2Nlc3MpOworICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICB9CiAg
ICAgfSk7CiB9CiAKQEAgLTMyNSwxOCArMzQzLDIwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFp
CiAgICAgfQogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVE
b21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUpIHsK
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1f
bWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4p
LCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIHByb21w
dEVuYWJsZWQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XShTdG9yYWdlQWNjZXNzU3RhdHVzIHN0YXR1cykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0
VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBzdGF0dXNdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
c3RhdHVzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBt
X3N0YXRpc3RpY3NTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURv
bWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwg
cHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVzKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBzdGF0dXNdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzQ4LDggKzM2OCw4
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKFJlZ2lzdHJhYmxlCiAgICAgLy8gY29taW5nIGZyb20gSVBDLiBTdHJp
bmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBhcyBsb25nIGFzIG5v
Ym9keSBvbiB0aGlzIHRocmVhZCBob2xkcyBhIHJlZmVyZW5jZQogICAgIC8vIHRvIHRob3NlIHN0
cmluZ3MuCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9
IFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFnZUlELCBvcGVu
ZXJEb21haW4gPSBXVEZNb3ZlKG9wZW5lckRvbWFpbildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyks
IG9wZW5lclBhZ2VJRCwgV1RGTW92ZShvcGVuZXJEb21haW4pKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnJlcXVlc3RTdG9y
YWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Mp
LCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyRG9tYWluKSk7CiAgICAgfSk7CiB9CiAKQEAg
LTM1NywxOCArMzc3LDIwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
cmFudFN0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21haW4g
PSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRO
b3csIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3Rh
dGlzdGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRT
dG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9t
YWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdhc0dyYW50ZWRBY2Nlc3Mp
IG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10oKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZN
b3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3cs
IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdh
c0dyYW50ZWRBY2Nlc3MpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHdhc0dyYW50
ZWRBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHdhc0dyYW50ZWRBY2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0pOworICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTM5Nyw5ICs0MTks
OSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29y
a1Byb2Nlc3MoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmICghbV9z
dGF0aXN0aWNzU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG1fc3RhdGlzdGljc1N0b3Jl
LT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIH0pOwogfQogCkBAIC00MjMsMTEgKzQ0
NSwxMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyZm9ybURhaWx5
VGFza3MoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhb
dGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkoKTsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVs
ZW1ldHJ5KCk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgeworICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCk7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVs
ZW1ldHJ5KCk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtNDM2LDggKzQ1Nyw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdWJtaXRUZWxlbWV0cnkoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRT
dWJtaXQoKm1fbWVtb3J5U3RvcmUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUgJiYg
aXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
KQorICAgICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3Vs
YXRlQW5kU3VibWl0KGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4o
Km1fc3RhdGlzdGljc1N0b3JlKSk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC00NzYsMjcgKzQ5NywyNiBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdl
YkZyYW1lUHJveHkmIGZyYQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkK
IHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWluID0gdGFyZ2V0RG9tYWluLmlzb2xh
dGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgp
LCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGlzUmVkaXJlY3Qs
IGlzTWFpbkZyYW1lXSB7Ci0KLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5sb2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0RG9tYWluLCB0b3BGcmFt
ZURvbWFpbiwgc291cmNlRG9tYWluLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CisgICAgICAg
IGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5s
b2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgc291cmNlRG9t
YWluLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BG
cmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWlu
ID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmco
dGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nU3VicmVz
b3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsKIAog
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291
cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFt
ZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWluID0g
dGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9t
YWluLmlzb2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmcodGFy
Z2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBpZiAobV9zdGF0
aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nU3VicmVzb3Vy
Y2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsKIAogICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsK
QEAgLTUwNSw5ICs1MjUsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRh
cmdldERvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIHBvc3RUYXNrKFt0aGlzLCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4uaXNv
bGF0ZWRDb3B5KCksIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5sb2dTdWJyZXNvdXJjZVJlZGlyZWN0KHNvdXJjZURvbWFpbiwgdGFyZ2V0RG9tYWluKTsKLQor
ICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NT
dG9yZS0+bG9nU3VicmVzb3VyY2VSZWRpcmVjdChzb3VyY2VEb21haW4sIHRhcmdldERvbWFpbik7
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQpAQCAtNTE3LDggKzUzNiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4g
PSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQot
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbik7Cisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5sb2dVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01MjgsOCArNTQ3LDgg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5
KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3RhdGlz
dGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmNsZWFyVXNlckludGVy
YWN0aW9uKGRvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNTM3LDcgKzU1Niw3IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNl
ckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX21l
bW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbikg
OiBmYWxzZTsKKyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX3N0YXRpc3RpY3NT
dG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluKSA6
IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgICAg
ICB9KTsKQEAgLTU0OSw4ICs1NjgsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbgogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFp
biA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRMYXN0U2Vlbihkb21haW4s
IHNlY29uZHMpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBt
X3N0YXRpc3RpY3NTdG9yZS0+c2V0TGFzdFNlZW4oZG9tYWluLCBzZWNvbmRzKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBA
IC01NjAsOCArNTc5LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBp
ZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0
UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01NzEsOCArNTkwLDggQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZUQKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0
b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTU4Miw3ICs2MDEsNyBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlv
bkhhbmRsZQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhb
dGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9y
eVN0b3JlLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIDogZW1wdHlTdHJpbmcoKTsKKyAg
ICAgICAgU3RyaW5nIHJlc3VsdCA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0aXN0aWNzU3Rv
cmUtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBlbXB0eVN0cmluZygpOwogICAgICAg
ICBwb3N0VGFza1JlcGx5KFtyZXN1bHQgPSByZXN1bHQuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwogICAgICAgICB9KTsKQEAgLTU5NCw3
ICs2MTMsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbgogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29s
YXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlID0gbV9tZW1v
cnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZh
bHNlOworICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX3N0YXRpc3RpY3NTdG9y
ZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1ByZXZhbGVudFJlc291cmNlKGRvbWFpbikgOiBmYWxz
ZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNQcmV2YWxlbnRSZXNvdXJjZSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICB9
KTsKQEAgLTYwNiw3ICs2MjUsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEbwogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9
IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShkb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVz
b3VyY2UgPSBtX3N0YXRpc3RpY3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lz
VmVyeVByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICB9KTsKQEAgLTYxOCw3ICs2MzcsOCBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNvdXJjZURv
bWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFpbikgOiBmYWxzZTsKKyAg
ICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBtX3N0YXRpc3RpY3NT
dG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
c3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKQorICAgICAgICAgICAgOiBmYWxzZTsK
ICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKTsKICAgICAgICAgfSk7CkBAIC02MzAsNyArNjUwLDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBS
ZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2so
W3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRv
cEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVt
b3J5U3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZURvbWFpbiwgdG9w
RnJhbWVEb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikKKyAgICAg
ICAgICAgIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcik7CiAgICAgICAgIH0pOwpAQCAtNjQyLDcgKzY2Myw4IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5n
VG8oY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IHBvc3RUYXNrKFt0aGlzLCBkb21haW5SZWRpcmVjdGVkRnJvbSA9IGRvbWFpblJlZGlyZWN0ZWRG
cm9tLmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVjdGVk
VG8uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUmVnaXN0ZXJlZEFzUmVk
aXJlY3RpbmdUbyhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRvKSA6IGZh
bHNlOworICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fc3RhdGlz
dGljc1N0b3JlID8gbV9zdGF0aXN0aWNzU3RvcmUtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRvKQorICAgICAgICAgICAg
OiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKTsKICAgICAgICAgfSk7CkBAIC02NTQsOCArNjc2LDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb20KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBv
c3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisg
ICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShkb21h
aW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKIH0KQEAgLTY2NSw4ICs2ODcsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9t
YWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmVkKGRv
bWFpbiwgdmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAg
ICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJlZChkb21haW4sIHZhbHVlKTsKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7
CiB9CkBAIC02NzYsNyArNjk4LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG8KICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGRvbWFpbiA9IGRvbWFpbi5pc29s
YXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQgPSBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNHcmFuZGZhdGhlcmVkKGRvbWFpbikgOiBm
YWxzZTsKKyAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQgPSBtX3N0YXRpc3RpY3NTdG9yZSA/
IG1fc3RhdGlzdGljc1N0b3JlLT5pc0dyYW5kZmF0aGVyZWQoZG9tYWluKQorICAgICAgICAgICAg
OiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVkLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNHcmFuZEZhdGhlcmVkKTsKICAgICAgICAgfSk7
CkBAIC02ODgsOCArNzExLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3QKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdWJGcmFtZURvbWFpbiA9IHN1
YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9t
YWluLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBpZiAobV9zdGF0
aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbik7CiAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwog
fQpAQCAtNjk5LDggKzcyMiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21haW4g
PSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BG
cmFtZURvbWFpbi5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKTsKKyAgICAg
ICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUt
PnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbiwgdG9w
RnJhbWVEb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTcxMCw4ICs3MzMsOCBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRh
c2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRv
bWFpblJlZGlyZWN0ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRlZENvcHkoKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9y
eVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oc3VicmVzb3VyY2VEb21haW4s
IGRvbWFpblJlZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAg
ICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oc3VicmVzb3VyY2VEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNzIx
LDggKzc0NCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNv
dXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3RlZEZyb20gPSBkb21haW5S
ZWRpcmVjdGVkRnJvbS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZEZyb20p
OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oc3VicmVzb3VyY2VEb21h
aW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC03MzIsOCArNzU1LDggQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBSZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVjdGVkVG8uaXNvbGF0ZWRDb3B5
KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKHRvcEZyYW1lRG9tYWlu
LCBkb21haW5SZWRpcmVjdGVkVG8pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisg
ICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8pOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTc0Myw4ICs3
NjYsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaXN0cgogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4u
aXNvbGF0ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVkaXJlY3RlZEZy
b20uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKKyAgICAgICAgaWYgKG1f
c3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkRnJv
bSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtNzU1LDEzICs3NzgsMTcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmQK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3RhdGlzdGlj
c1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX21lbW9y
eVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKworICAgICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsK
KyAgICAgICAgCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1f
c3RhdGlzdGljc1N0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwogICAgIH0pOwogfQogCkBA
IC03NzAsMTQgKzc5NywxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZUZvckRvbWFpbnMoY29ucwogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQg
ZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICBwb3N0VGFzayhbdGhpcywgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlu
c1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYg
KCFtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9t
YWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+dXBkYXRlQ29v
a2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwogICAgIH0pOwogfQogCkBA
IC03ODYsMTQgKzgxNiwxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2NoZWR1bGVDbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0CiAgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBm
cm9tIHRoZSBtYWluIHRocmVhZC4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IHBvc3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NT
dG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21lbW9y
eVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhkb21h
aW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0o
KSB7IH0pOwogICAgIH0pOwogfQogCkBAIC04MDQsMjIgKzgzNywyNyBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChTaG91bGRHcgogICAgICAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkKICAgICAgICAgICAg
IG1fcGVyc2lzdGVudFN0b3JhZ2UtPmNsZWFyKCk7CiAKLSAgICAgICAgQ29tcGxldGlvbkhhbmRs
ZXJDYWxsaW5nU2NvcGUgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICgh
bV9zdGF0aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9
PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBiZWluZyBj
bGVhcmVkLCBtX3N0YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0
aGVyIGRhdGEuIik7CisKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpIHsKLSAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhp
cy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjb21wbGV0aW9uSGFuZGxlckNhbGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+
Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgc2hv
dWxkR3JhbmRmYXRoZXIsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZh
dGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShjb21wbGV0aW9uSGFuZGxl
ckNhbGxlci5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Z3JhbmRm
YXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3ZlKGNh
bGxiYWNrQWdncmVnYXRvcildKCkgbXV0YWJsZSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUgaXMg
bnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBB
ZnRlciBiZWluZyBjbGVhcmVkLCBtX3N0YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5n
IHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIg
PT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpCi0gICAgICAgICAgICAgICAgUkVM
RUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBCZWZvcmUgYmVpbmcg
Y2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVy
IGRhdGEuIik7CiAgICAgICAgIH0KICAgICB9KTsKIH0KQEAgLTgzNyw4ICs4NzUsOCBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbihTZWNvbmRzIHNlY29uZAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgcG9zdFRhc2soW3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihzZWNvbmRzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQpAQCAtODQ3LDggKzg4NSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2VjCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25k
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMpOwor
ICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NT
dG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMpOwog
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwpAQCAtODU4LDggKzg5Niw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
ICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+c2V0R3JhbmRmYXRoZXJpbmdUaW1lKHNlY29uZHMpOworICAgICAgICBpZiAobV9zdGF0aXN0
aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJp
bmdUaW1lKHNlY29uZHMpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtOTAzLDggKzk0MSw4IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4
aW11bUVudHJ5CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFz
ayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1h
eGltdW1FbnRyeUNvdW50KTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAg
ICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1heGltdW1F
bnRyeUNvdW50KTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKQEAgLTkxNSw4ICs5NTMsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdl
dENvdQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhp
cywgcHJ1bmVUYXJnZXRDb3VudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFyZ2V0
Q291bnQpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFyZ2V0Q291bnQpOwog
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwpAQCAtOTI3LDggKzk2NSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhCiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKCk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgKaW5kZXggMDYzNDM4NWMxMGIzMjQxODQxMjg4ZmY4NDE5MWQ5MjgyNTk4YjhkMS4uMGEx
YTMwM2NkZjg2NTMyNmQyODFjOTE1YmJmNDJkZmRjNWY3ZWU1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtNTIsNyArNTIsNyBAQCBlbnVtIGNs
YXNzIFNob3VsZFNhbXBsZSA6IGJvb2w7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0
d29ya1Nlc3Npb247Ci1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7Citj
bGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xhc3MgV2Vi
UHJvY2Vzc1Byb3h5OwpAQCAtMTg5LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAKICAgICBXZWFrUHRy
PE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9uOwogICAgIFJlZjxXb3JrUXVldWU+IG1f
c3RhdGlzdGljc1F1ZXVlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU+IG1fbWVtb3J5U3RvcmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9zdGF0aXN0aWNzU3RvcmU7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0
ZW50U3RvcmFnZTsKIAogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4gbV9kYWlseVRhc2tzVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDU1Y2JhYjg2NGZlZWI5Y2NlODM0YjRmYWRk
OWM0MDAyM2I0YjkyMjAuLmIyNTU4ZWYxYzNkN2M5MWQzOWE2ODI5NjMzZmQzYTczN2JhNGFhN2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY2hlbWVSZWdpc3RyeS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8d3Rm
L0FsZ29yaXRobXMuaD4KQEAgLTMyOSw2ICszMzAsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
JgogICAgIH0KICNlbmRpZgogCisgICAgV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5zZXRJVFBEYXRhYmFzZUVuYWJsZWQocGFyYW1ldGVycy5zaG91bGRF
bmFibGVJVFBEYXRhYmFzZSk7CisKICAgICBhdXRvKiBkZWZhdWx0U2Vzc2lvbiA9IG5ldHdvcmtT
ZXNzaW9uKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogICAgIGZvciAoY29u
c3QgYXV0byYgY29va2llIDogcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5w
ZW5kaW5nQ29va2llcykKICAgICAgICAgZGVmYXVsdFNlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpLnNldENvb2tpZShjb29raWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAppbmRleCBjNmRmMDhlOWZiNzc2NmY3NzBhZmFkZWYxYWE3ZjIxMjk0OWQxZjU1Li4wODcxNTBh
MWQ1MjFhNTI0ZWNiZDhiNWQ5YTFiNDg2M2FmMTZhNTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmNwcApAQCAtOTMsNiArOTMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogI2lmIEVO
QUJMRShTRVJWSUNFX1dPUktFUikKICAgICBlbmNvZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3Ry
YXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVu
c2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5kbGUgPDwgc2hvdWxk
RGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsKICNlbmRpZgorICAg
IGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2U7CiB9CiAKIGJvb2wgTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiByZXN1bHQpCkBAIC0yMTcsNiArMjE4LDkg
QEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVj
b2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlm
CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFz
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggMmZkM2JlOWZkZWQ5ODBiNzU3M2NlM2I1MTZi
MDdhOTZmYWRhZjczYi4uZmM5MDBjMmVkN2YwY2VmYjE4MjkwYzQwZjgwMzVjY2ZlNWQ5NzhmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTExLDYgKzExMSw3IEBAIHN0cnVj
dCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyB7CiAgICAgVmVjdG9yPFN0cmluZz4g
dXJsU2NoZW1lc1NlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlOwogICAgIGJvb2wgc2hvdWxkRGlzYWJs
ZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSB7IGZhbHNlIH07CiAjZW5kaWYK
KyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFiYXNlIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFz
c2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5j
cHAKaW5kZXggZjFlYTc5MjlkNTMwN2YwNWRjMDY4MGY2NDc1NGE2OWY4M2U5ODU2Yi4uYjQ0OTJh
NGQyNDlmYzk3ZGNhOGFhM2QzMjNkMzUyNzliYWY2ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcgKzQ3LDEyIEBAIFJlc291cmNlTG9hZFByZXZh
bGVuY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNl
UHJldmFsCiAgICAgYXV0byBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSByZXNv
dXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKTsKICAgICBh
dXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGlj
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuc2l6ZSgpOwogICAgIGF1dG8gdG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdHNUby5zaXplKCk7Ci0gICAgCisKKyAgICByZXR1cm4gY2FsY3VsYXRlUmVzb3VyY2VQ
cmV2YWxlbmNlKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnQsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgY3VycmVudFByZXZhbGVuY2UpOwor
fQorCitSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UodW5zaWduZWQgc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgdW5z
aWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBSZXNvdXJjZUxvYWRQcmV2YWxl
bmNlIGN1cnJlbnRQcmV2YWxlbmNlKQorewogICAgIGlmICghc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc0NvdW50CiAgICAgICAgICYmICFzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnQKICAgICAgICAgJiYgIXN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaAppbmRleCBhY2YxZjM4OWRkNTFhMDBj
NTEwN2RjNjcyZjlkM2ZiYTlmMmJmZWYwLi41OGY1NjVhMTFhNzczNWQwNDEyOTNjYWJmNDFjMjVi
YzY1NWQxOTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Miwx
MCArNDIsMTEgQEAgcHVibGljOgogICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
KCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgflJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyKCkgPSBkZWZhdWx0OwogICAgIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY2FsY3VsYXRlUmVz
b3VyY2VQcmV2YWxlbmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJl
c291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNl
KTsKKyAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5j
ZSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVk
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1Rv
Q291bnQsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY3VycmVudFByZXZhbGVuY2UpOwogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQorICAg
IHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwg
dW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVPcmlnaW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3Vi
ZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKKyAgICAgICAgcmV0dXJuIGNsYXNzaWZ5
V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQs
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luc0NvdW50KTsKICAgICB9CiAgICAgYm9vbCBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hv
bGQodW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyQ29jb2EuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2Nv
Y29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwCmluZGV4IGFjZmJl
M2NkYmMxYzNhOTUxZjcyMzcwYmQ1OTg3ZTQ3MmU4ZDRjMjUuLmUxZjUzMDRlOTMyMjY4NGVjNjA2
MjZjNjMwMzk3NWYyM2QxYjhjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0v
Y2xhc3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2EvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAKQEAgLTM1LDE1ICszNSwxNSBAQAogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
ckNvY29hOjpjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5z
Q291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWdu
ZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQorYm9vbCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2xhc3NpZmllckNvY29hOjpjbGFzc2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQog
ewogICAgIGlmICghY2FuVXNlQ29yZVByZWRpY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIGNsYXNz
aWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291
bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZy
YW1lT3JpZ2luc0NvdW50KTsKKyAgICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVz
aG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsK
IAogICAgIFZlY3Rvcjxzdm1fbm9kZT4gZmVhdHVyZXM7CiAKLSAgICBpZiAoc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQotICAgICAgICBmZWF0dXJlcy5hcHBlbmQoezEsIHN0
YXRpY19jYXN0PGRvdWJsZT4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KX0p
OworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQpCisgICAgICAg
IGZlYXR1cmVzLmFwcGVuZCh7MSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zQ291bnQpfSk7CiAgICAgaWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudCkKICAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsyLCBzdGF0aWNfY2FzdDxkb3Vi
bGU+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCl9KTsKICAgICBpZiAoc3ViZnJh
bWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZl
cmVuY2VzLnlhbWwKaW5kZXggZjU1ODQzMjU5MGZiZGViNjg5NzkzZTBiNDliMjY3Nzg0MTY3ZDJl
YS4uZTJhZTZhODEyYjY3ODBhN2UwODA0MjI1NjEyZGNhYWJjOTJlMTA5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCkBAIC0xMzc5LDYgKzEzNzksMTQgQEAgSXRw
RGVidWdNb2RlRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiSW50ZWxsaWdl
bnQgVHJhY2tpbmcgUHJldmVudGlvbiBEZWJ1ZyBNb2RlIgogICB3ZWJjb3JlQmluZGluZzogUnVu
dGltZUVuYWJsZWRGZWF0dXJlcwogCitJc0lUUERhdGFiYXNlRW5hYmxlZDoKKyAgdHlwZTogYm9v
bAorICBkZWZhdWx0VmFsdWU6IGZhbHNlCisgIGh1bWFuUmVhZGFibGVOYW1lOiAiSVRQIERhdGFi
YXNlIEJhY2tlbmQiCisgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVuYWJsZSBJbnRlbGxp
Z2VudCBUcmFja2luZyBQcmV2ZW50aW9uIERhdGFiYXNlIEJhY2tlbmQiCisgIHdlYmNvcmVCaW5k
aW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCisgIGNhdGVnb3J5OiBpbnRlcm5hbAorCiBTZXJ2
aWNlV29ya2Vyc0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgZGVmYXVsdFZhbHVlOiBERUZBVUxU
X1NFUlZJQ0VfV09SS0VSU19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA3NDA3Y2MyMTkwM2UyNjRi
ODg0OGM4NWE1ODk1MDg0NGQzZGRhYzQ4Li4yZWZiOGU1OThiNmQ0N2UyMTcyZWI5MzViYjI5NDYz
MGEzY2MyMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTQyLDggKzQyLDEwIEBAIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtTb2NrZXRTdHJlYW0uY3BwCiBOZXR3b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKIE5l
dHdvcmtQcm9jZXNzL1ByZWNvbm5lY3RUYXNrLmNwcAogCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAogTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCiBOZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3Rv
cmFnZS5jcHAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3Bw
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBjNDNlNGU1MDkwYmVkYzcxYzlkZTYzZjg2N2Y3
NDBhOTQxZmQwZjEyLi5jMDBmYTU3Yjk3ZGE5NmZiM2RhY2M3YjQ2MmRhMWQ0ZjQzNzFmZWJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yOSw2ICsyOSw3IEBAIE5ldHdvcmtQcm9jZXNzL2Nv
Y29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3Jr
UHJvY2Vzc0NvY29hLm1tCiBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29h
Lm1tCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlQ29jb2EubW0KIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogCkBAIC0zMzIsNyArMzMzLDYgQEAgVUlQcm9jZXNz
L0NvY29hL01lZGlhQ2FwdHVyZVV0aWxpdGllcy5tbQogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5tbQogVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KIFVJUHJv
Y2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0KLVVJUHJvY2Vzcy9Db2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQogVUlQcm9jZXNzL0Nv
Y29hL1NhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1Nlc3Npb25T
dGF0ZUNvZGluZy5tbQogVUlQcm9jZXNzL0NvY29hL1N5c3RlbVByZXZpZXdDb250cm9sbGVyQ29j
b2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmE2Mjc2NjUyZTFkZjZmZGE0ZGQ4YjU3NTRlM2Jm
MDFjMzc2ZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlQ29jb2EubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZS5oIgotCi0jaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykK
LQotI2ltcG9ydCA8V2ViQ29yZS9SZWdpc3RyYWJsZURvbWFpbi5oPgotI2ltcG9ydCA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCi17Ci0gICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBpbml0T25jZTsKLQotICAgIGRpc3BhdGNoX29uY2UoJmluaXRPbmNlLCBeewotICAg
ICAgICBTZWNvbmRzIHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iXSk7Ci0gICAgICAgIGlmICh0aW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uID4gMF9zICYmIHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPD0gMjRfaCAq
IDMwKQotICAgICAgICAgICAgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbih0aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uKTsKLQotICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRh
dGFSZWNvcmRzUmVtb3ZhbChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBk
b3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0
YVJlY29yZHNSZW1vdmFsIl0pOwotICAgICAgICBpZiAobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJl
Y29yZHNSZW1vdmFsID4gMF9zICYmIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3Zh
bCA8IDFfaCkKLSAgICAgICAgICAgIHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVt
b3ZhbChtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOwotCi0gICAgICAgIFNl
Y29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVm
YXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NHcmFuZGZhdGhlcmlu
Z1RpbWUiXSk7Ci0gICAgICAgIGlmIChncmFuZGZhdGhlcmluZ1RpbWUgPiAwX3MgJiYgZ3JhbmRm
YXRoZXJpbmdUaW1lIDw9IDI0X2ggKiA3KQotICAgICAgICAgICAgc2V0R3JhbmRmYXRoZXJpbmdU
aW1lKGdyYW5kZmF0aGVyaW5nVGltZSk7Ci0KLSAgICAgICAgc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29s
Rm9yS2V5OkAiSXRwRGVidWdNb2RlIl0pOwotICAgICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3Ry
aW5nRm9yS2V5OkAiSXRwTWFudWFsUHJldmFsZW50UmVzb3VyY2UiXTsKLSAgICAgICAgaWYgKGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpIHsKLSAgICAgICAgICAgIFVSTCB1cmwgeyBVUkwo
KSwgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9OwotICAgICAgICAgICAgaWYgKCF1cmwu
aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0cDovLyIpOwotICAgICAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpOwotICAg
ICAgICAgICAgICAgIHVybCA9IHsgVVJMKCksIGJ1aWxkZXIudG9TdHJpbmcoKSB9OwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAg
c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoUmVnaXN0cmFibGVEb21haW4geyB1cmwg
fSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTZWNvbmRzIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJs
ZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDYWNoZU1heEFnZUNhcCJdKTsKLSAgICAg
ICAgaWYgKGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzID4gMF9zICYmIGNhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzIDw9IDI0X2ggKiAzNjUpCi0gICAgICAgICAg
ICBzZXRDYWNoZU1heEFnZUNhcChjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk7
Ci0gICAgICAgIAotICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGllbnRTaWRlQ29va2llc0FnZUNhcCJdKTsKLSAgICAgICAgaWYgKGNs
aWVudFNpZGVDb29raWVzQWdlQ2FwID4gMF9zICYmIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwIDw9
IDI0X2ggKiAzNjUpCi0gICAgICAgICAgICBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhj
bGllbnRTaWRlQ29va2llc0FnZUNhcCk7Ci0gICAgfSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bQppbmRleCA5ODc0NmMzN2M1MjRjODc4NGI3YTZlODI2Njc2NjY1MTc1ZjZmYjBkLi5iMjA3Y2Q0
MjExODc4NTYzMGI5ODhkNzhiNWE1YmM2ZWFmNWFjNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTI5Niw2ICsy
OTYsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJv
Y2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogI2lmIEVOQUJMRShQUk9YSU1JVFlfTkVU
V09SS0lORykKICAgICBwYXJhbWV0ZXJzLndpcmVsZXNzQ29udGV4dElkZW50aWZpZXIgPSBtX2Nv
bmZpZ3VyYXRpb24tPndpcmVsZXNzQ29udGV4dElkZW50aWZpZXIoKTsKICNlbmRpZgorCisgICAg
cGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5
OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVy
ZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KV1dOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCmlu
ZGV4IDg4ODNmNzM0NTY3Njk0NGY0M2IzODgwMWM1YTUxYWMwNzBiMjQ1YjEuLjE2YmQ1Y2Q1ODUx
M2FmYWU5YjAwMmQ2OTI4MjczMjBhNjY3NzQ5ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNs
dWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNpdGVQb2xpY2llc0RhdGEuaCIKICNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9v
bC5jcHAKaW5kZXggM2MyMjA5N2FjNzkyMzhkMWJlMTI0ZmJiZGIyYTMzNWRjYmZiMTY4MS4uZjQ4
ZjFiMTZlMmJlMTUzYmVlYzdkNWYzYzk3ZjljODdhMjFhMDRmNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApAQCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8cGFs
L1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBlZGIwNTkzNmI1ODcxZDNhNTFmMTRiODU0MTlhZmFiYWRmOTBhMDZmLi5k
N2UyMTk4Y2I3MDkyMzlhZDM1MmZkODhhYmZkMzNiMTA5ZjZjNzQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM1MzAsNiArMzUzMCw4
IEBACiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3Rv
cmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NjJCNzQ4NDEyMEJCQTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNl
c1JlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJl
bmNlc1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjEy
MjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBMEQ3ODYyMjIw
NzkxRUQwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0Ex
NTA2NzIxREQ1NjI5ODAwMUY0QjU4IC8qIGNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5z
YiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSAiY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9u
LnNiIjsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9XZWJLaXQyL2NvbS5hcHBsZS5XZWJLaXQucGx1
Z2luLWNvbW1vbi5zYiI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdB
MUUyQTg0MUVFRkU4OEEwMDM3QTBFMCAvKiBBUElOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElOb3RpZmljYXRpb25Qcm92aWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTNBQ0UxQTFFRUVGNzhDMDBBODY0QTQgLyog
QVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVuZGxlUGFnZUxvYWRlckNsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU0OSw2ICszNTUxLDkgQEAKIAkJN0E5Q0Q4QzIxQzc3
OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQjZFQTQ0MUVFQUFF
MjMwMDAzN0IyQiAvKiBBUElJY29uRGF0YWJhc2VDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQVBJSWNvbkRhdGFiYXNlQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdBQjZFQTQ2MUVFQUI2QjAwMDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblBy
b3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUdlb2xvY2F0aW9u
UHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTcyMjFDQUUw
NjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaDsgcGF0aCA9
IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
N0FDRTgyRTkyMjFERTcyMjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNv
Y29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Q29jb2EubW07IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUYyMzYxRTFFNzlBM0I0MDA0
MzhBMDUgLyogV2ViRXJyb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkVycm9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjFG
MUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIz
NjIyMUU3OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJvcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVycm9yc0NvY29hLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzY5OSw3ICszNzA0LDYgQEAKIAkJODM3MkRCMjYxQTY3NTYyODAw
QzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3
QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIyRTFBNjc3RDRBMDBDNjk3QzUgLyogV0tEaWFn
bm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJODM3QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4IC8qIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjYyMUE2OEIzNDIwMDMwRjM4NiAvKiBBUElEaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyogX1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBfV0tEaWFnbm9zdGljTG9nZ2lu
Z0RlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjZBMUE2OEMz
MEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTMyNSw3ICs1MzI5LDYgQEAKIAkJCQlDREEyOUExRTFDQkVCNUZC
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5LmggKi8sCiAJCQkJQ0RBMjlB
MjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdl
cy5pbiAqLywKIAkJCQlDREEyOUExRjFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9u
TWFuYWdlclByb3h5Lm1tICovLAotCQkJCTgzN0E2NjAwMjBFMkFEODQwMEE5REJEOCAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbSAqLywKIAkJCQk1Q0E5ODU0QjIx
MEJFQjczMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5nV2FybmluZ0NvY29hLm1tICovLAogCQkJCTFB
MDAyRDQ3MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNzaW9uU3RhdGVDb2RpbmcuaCAqLywKIAkJCQkx
QTAwMkQ0NjE5NkIzNDVEMDBCOUFENDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLm1tICovLApAQCAt
NjkyNywxMCArNjkzMCwxNSBAQAogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3Np
ZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0Ew
RDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmNwcCAqLywKKwkJCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLywKIAkJCQk3QUZCRDM2NDIxRTUxQkFCMDA1REJB
Q0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcCAqLywKIAkJCQk3QUZC
RDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
LmggKi8sCiAJCQkJN0FGQkQzNjkyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8sCiAJCQkJN0FGQkQzNjgyMUU1NDJFODAwNURC
QUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5oICovLAorCQkJ
CTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwICovLAorCQkJCTdBQ0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk3QUNFODJFOTIyMURFNzIyMDAwREE5NEMgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8sCiAJCQkJN0E0MUU5RkEyMUY4MURBQzAw
Qjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oICovLAogCQkJCTdBM0ZFQ0Ex
MjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNjZXNzU3RhdHVzLmggKi8sCiAJCQkJN0E4NDNB
MUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAg
Ki8sCkBAIC05NjA4LDYgKzk2MTYsNyBAQAogCQkJCTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAv
KiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNTczOUJCRDFCNDIwNDJEMDBEMjU4QzEgLyogV2ViVXNlck1lZGlhQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4M0VFNTc1QzFEQjdENjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3MkZENDQzMjIyNjVDRTIwMEEx
RUNDMyAvKiBXZWJWaWV3RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJERkM3REJCMUJDQ0MxOTUwMEMxNTQ4QyAvKiBXZWJWaWV3SW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjlDRDU1QUExMjhFMjk0RjAwMTMzQzg1IC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBh
Z2VPYmplY3RCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOTIzMkRGNDE4QjI5RDY4MDBEMDU5
NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdE1hYy5oIGluIEhlYWRlcnMgKi8sCkBA
IC05NzQ0LDcgKzk3NTMsNiBAQAogCQkJCUM1NDI1NkJBMThCRUMxOEMwMERFNDE3OSAvKiBXS0Zv
cm1TZWxlY3RDb250cm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA4Q0Y1MjFENjNDMTNBMDBC
NDhERjEgLyogV0tGb3JtU2VsZWN0UGlja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA4Q0Y1
NDFENjNDMTQwMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UG9wb3Zlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTcyRkQ0NDMyMjI2NUNFMjAwQTFFQ0MzIC8qIFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dP
YnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNDY5NUExMjE0RURGNDAwMEI5OEVCIC8q
IFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdERkE3MDAx
ODEwQkI5MjAwMUY0QTlGIC8qIFdLRm91bmRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNE
MDEzOUIxMTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJhbWUuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363566</attachid>
            <date>2019-03-04 16:13:24 -0800</date>
            <delta_ts>2019-03-04 18:15:27 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-194867-20190304161323.patch</filename>
            <type>text/plain</type>
            <size>285087</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2VhYmI3NmFjYjIzMDhm
MjllZTdjYzNhOTAyMzVkNWZlOTI4NDc1Ni4uZTI1MzE2YTAwM2Q4MzFiM2E0YjRhNDQxZTUzZGQ2
NzE5NDEwYzg3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVt
ZXouCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBvcnQg
dXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxzbyBl
eHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdlYkNv
cmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRhYmFz
ZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIwMTkt
MDMtMDQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IHRoZSBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDFmNTFiZTg0MDRmNDEwMzg1NzM5YTI1NDgxYmMx
MWRjMzkyZDFiYi4uZjQyYzg1NjNiMTJmOWVjMjA5NDg0YWMwZDE4ODAwYTkyNzY5MzU3YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyODMgQEAKKzIwMTktMDItMjEgIEJyZW50IEZ1bGdoYW0gIDxiZnVs
Z2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIGEgU1FMaXRlIGRhdGFiYXNlIHRvIGhvbGQg
dGhlIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODY3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8y
NDI0MDg1ND4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBU
aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkYXRhYmFzZSBwbGlzdCBpcyBpbmVmZmljaWVudC4g
SXQgcmVxdWlyZXMgbW9yZSBtZW1vcnkgdXNlCisgICAgICAgIHRoYW4gaXQgbmVlZHMsIGFuZCBm
b3JjZXMgbG90cyBvZiBsb29waW5nIGFuZCBzdHJpbmcgY29tcGFyaXNvbnMgdG8gZmluZCBpbmZv
cm1hdGlvbi4KKworICAgICAgICBUaGlzIHByb2JsZW0gaGFzIGFscmVhZHkgYmVlbiBzb2x2ZWQg
aW4gdGhlIGZvcm0gb2YgcmVsYXRpb25hbCBkYXRhYmFzZXMuIFdlIHVzZSB0aGVtCisgICAgICAg
IGVsc2V3aGVyZSBpbiBXZWJLaXQsIGFuZCBzaG91bGQgZG8gc28gZm9yIHRoaXMgc3RvcmFnZSBh
cyB3ZWxsLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY3JlYXRlcyBhbiBvcHRpb25hbCBTUUxpdGUg
ZGF0YWJhc2UgdG8gaGFuZGxlIElUUCBvcGVyYXRpb25zLgorCisgICAgICAgIDEuIEl0IGFkZHMg
YSBuZXcgaW50ZXJuYWwgZXhwZXJpbWVudGFsIGZlYXR1cmUgZmxhZyB0byBhY3RpdmF0ZSBpdC4g
SXQgcmVxdWlyZXMgdGhlIHVzZXIKKyAgICAgICAgICAgZXhpdCBhbmQgcmVzdGFydCB0aGUgcHJv
Y2VzcyB0byB0YWtlIGVmZmVjdC4KKyAgICAgICAgMi4gSXQgcG9wdWxhdGVzIGl0c2VsZiBmcm9t
IHRoZSBleGlzdGluZyBwbGlzdCBmaWxlIChpZiBpdCBleGlzdHMpLgorICAgICAgICAzLiBJdCBz
dG9wcyB1c2luZyB0aGUgcGxpc3QgaW4gZmF2b3Igb2YgdGhlIGRhdGFiYXNlLgorICAgICAgICA0
LiBJdCBkb2VzIHF1ZXJpZXMgYW5kIG90aGVyIG9wZXJhdGlvbnMgdXNpbmcgdGhlIGRhdGFiYXNl
IGluc3RlYWQgb2YgdGhlIG9sZCBoYXNoIHRhYmxlCisgICAgICAgICAgIGltcGxlbWVudGF0aW9u
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmVmYWN0b3JzIHRoZSBleGlzaXRpbmcgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIGNsYXNzIGludG8gYSBiYXNlCisgICAgICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSBjbGFzcywgd2hpY2ggUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlIGlzIGJhc2VkIG9uLgorICAgICAgICBJdCBhZGRzIGEgbmV3IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlIHRoYXQgaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMg
b2YgU1FMCisgICAgICAgIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGhlc2UgY29kZSBjaGFuZ2Vz
IHNob3VsZCBub3QgaGF2ZSBhbnkgaW1wYWN0IG9uIGV4aXN0aW5nIG9wZXJhdGlvbnMsIGFuZCB3
aGVuIGVuYWJsZWQKKyAgICAgICAgc2hvdWxkIHByb2R1Y2UgdGhlIHNhbWUgdGVzdCByZXN1bHRz
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6Y3JlYXRlU2NoZW1hKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9t
YWluKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnJlbGF0aW9uc2hpcEV4aXN0cyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXApOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29u
ZmlybURvbWFpbkRvZXNOb3RFeGlzdCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZyb21TdHJpbmcgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkYXRhYmFzZUlzRW1wdHkgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9t
TWVtb3J5U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5IGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3JlbWVudFJl
Y29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY3Vyc2l2ZWx5RmluZE5vblByZXZhbGVudERv
bWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbik6CisgICAgICAgIChXZWJLaXQ6OmJ1aWxk
TGlzdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCk6CisgICAgICAg
IChXZWJLaXQ6Omxpc3RUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcyk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWNs
YXNzaWZ5UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9yYWdlSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNj
ZXNzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjps
b2dTdWJyZXNvdXJjZUxvYWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2VySW50ZXJh
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZHVt
cFJlc291cmNlTG9hZFN0YXRpc3RpY3MgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21haW4gY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJG
cmFtZVVuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclBy
ZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNHcmFuZGZhdGhlcmVkIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNl
dFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVP
cmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0RnJvbSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JQcmltYXJ5RG9tYWluKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OmNvb2tpZVRyZWF0bWVudEZvck9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpoYXNVc2VyR3JhbnRlZFN0b3JhZ2VB
Y2Nlc3NUaHJvdWdoUHJvbXB0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2Nr
aW5nKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckJsb2NraW5nU3RhdGVGb3JE
b21haW5zKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXZhbGVudERvbWFpbnMgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Zmlu
ZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlv
bnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp0b3BQcml2YXRlbHlDb250cm9sbGVkRG9tYWluc1RvUmVt
b3ZlV2Vic2l0ZURhdGFGb3IpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlTGFzdFNlZW4p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nl
c3MpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0VtcHR5IGNvbnN0KToKKyAgICAgICAgKiBO
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVsZXRl
ZENvdW50Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5bmNTdG9yYWdlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0Ojpkb21haW5zVG9TdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpP
cGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpP
cGVyYXRpbmdEYXRlOjp0b2RheSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGlu
Z0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktp
dDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPD0gY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdEYXRlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6bWVyZ2VPcGVyYXRpbmdEYXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OmNvbXB1dGVJbXBvcnRhbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3Zh
bCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZW1vdmVEYXRhUmVjb3Jk
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRo
ZXJFeGlzdGluZ1dlYnNpdGVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2No
ZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2FuY2Vs
UGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VGltZVRvTGl2ZVVz
ZXJJbnRlcmFjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldENhY2hlTWF4QWdlQ2Fw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lk
ZUNvb2tpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNT
dGF0aXN0aWNzRXhwaXJlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFBydW5lRW50cmllc0Rvd25Ubyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9j
ZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c3RvcmUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5h
YmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAo
KTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojpkb21haW5z
VG9TdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUp
OgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjp0b2RheSk6CisgICAgICAgIChXZWJL
aXQ6Ok9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJh
dGluZ0RhdGU6Om9wZXJhdG9yPD0gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6flJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5jZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jk
c1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlRGF0YVJlY29yZHMpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW5k
ZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2VGb3JEZWJ1Z01vZGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNhbmNl
bFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRDYWNoZU1heEFnZUNhcCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2Fj
aGVNYXhBZ2VDYXApOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkUmVt
b3ZlRGF0YVJlY29yZHMgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZ0ZvckRv
bWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdGF0aXN0aWNzRXBpcmF0aW9uVGlt
ZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bWVyZ2VPcGVyYXRpbmdEYXRlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc1N0YXRpc3RpY3NF
eHBpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmxvZ1Rlc3RpbmdFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRlYnVnTG9nRG9tYWluc0lu
QmF0Y2hlcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oLgorICAg
ICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpPcGVyYXRpbmdEYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc0VtcHR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc0RlYnVnTW9kZUVu
YWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnN0b3JlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldERlYnVnTG9nZ2dpbmdFbmFibGVkKToK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZUNvY29hLm1tOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0uCisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJ
Zk5lZWRlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5u
ZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJt
aXRUZWxlbWV0cnkpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVyc2lzdGVu
dFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHNQcm9jZXNzaW5nKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdG9yYWdlQWNjZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1
ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNz
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJm
b3JtRGFpbHlUYXNrcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dXZWJTb2NrZXRMb2FkaW5nKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z1N1YnJlc291cmNlUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Oldl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omhhc0hhZFVzZXJJ
bnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TGFzdFNlZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUHJldmFs
ZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVn
aXN0ZXJlZEFzU3ViRnJhbWVVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjppc0dyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbik6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5nVXBkYXRlKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNvb2tpZUJsb2NraW5n
VXBkYXRlRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFy
SW5NZW1vcnlBbmRQZXJzaXN0ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJp
ZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFBydW5lRW50cmllc0Rvd25Ubyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0VmFsdWVzKToKKyAgICAgICAg
KiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6
ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnM6OmRlY29kZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMuaDoKKyAgICAgICAgKiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5j
ZSk6CisgICAgICAgICogUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllci5oOgorICAgICAgICAqIFNoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKiBXZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxOS0wMy0wNCAgTWljaGFlbCBDYXRhbnph
cm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV0gRW5hYmxlIHdlYiBw
cm9jZXNzIHNhbmRib3gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVu
YWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgKaW5kZXggNTRmYjZiYjc5MDFhZTFkZGE0MmU3N2NlZmUzN2FkNDljYjZlODg5Yi4uNjJk
OWVkMzY0YTQ2ZmMxMTdjZGJlYmUxODc2NTZhZDgxZmIzYzRkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgsOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1f
aXRwRGVidWdNb2RlID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01vZGVFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQgc2V0SVRQRGF0
YWJhc2VFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNJVFBEYXRhYmFzZUVuYWJsZWQgPSBp
c0VuYWJsZWQ7IH0KKyAgICBib29sIGlzSVRQRGF0YWJhc2VFbmFibGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc0lUUERhdGFiYXNlRW5hYmxlZDsgfQorCiAgICAgdm9pZCBzZXRSZXN0cmljdGVkSFRU
UFJlc3BvbnNlQWNjZXNzKGJvb2wgaXNFbmFibGVkKSB7IG1faXNSZXN0cmljdGVkSFRUUFJlc3Bv
bnNlQWNjZXNzID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCByZXN0cmljdGVkSFRUUFJlc3BvbnNl
QWNjZXNzKCkgY29uc3QgeyByZXR1cm4gbV9pc1Jlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3M7
IH0KIApAQCAtNTM0LDYgKzUzNyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21vdXNlbW92ZUV2
ZW50SGFuZGxpbmdQcmV2ZW50c0RlZmF1bHRFbmFibGVkIHsgZmFsc2UgfTsKICNlbmRpZgogCisg
ICAgYm9vbCBtX2lzSVRQRGF0YWJhc2VFbmFibGVkIHsgZmFsc2UgfTsKKwogICAgIGZyaWVuZCBj
bGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM+OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAppbmRleCA0MGZj
ZTA2NDQwNDUxMzc0ZDQ2NDkzMGFmNDZjOTA3NzNlM2Y4NmE0Li42NDNkMjQyNjc2OWZmNDAwNDE4
OWE4ZjY2OTBlYjFkNDMwNmFiMmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvU1FMaXRlRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
U1FMaXRlRGF0YWJhc2UuaApAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCB0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNs
ZWFyQWxsVGFibGVzKCk7Ci0gICAgaW50IHJ1blZhY3V1bUNvbW1hbmQoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBpbnQgcnVuVmFjdXVtQ29tbWFuZCgpOwogICAgIGludCBydW5JbmNyZW1lbnRhbFZh
Y3V1bUNvbW1hbmQoKTsKICAgICAKICAgICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgKaW5kZXggYTE5M2Q4YzI0YjBiZDAyNDk2
NWJiMTA1NDQ2NDIzYmJjOGY1YmZlOS4uZjM2NmM3MzAyZjRiYTVhNWY0YWMxYTYxYzE2MjYzMzEz
OTMyZDNkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0
YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1l
bnQuaApAQCAtNzYsNyArNzYsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdldENvbHVtbk5hbWUo
aW50IGNvbCk7CiAgICAgU1FMVmFsdWUgZ2V0Q29sdW1uVmFsdWUoaW50IGNvbCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgU3RyaW5nIGdldENvbHVtblRleHQoaW50IGNvbCk7Ci0gICAgZG91YmxlIGdl
dENvbHVtbkRvdWJsZShpbnQgY29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgZ2V0Q29s
dW1uRG91YmxlKGludCBjb2wpOwogICAgIFdFQkNPUkVfRVhQT1JUIGludCBnZXRDb2x1bW5JbnQo
aW50IGNvbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50NjRfdCBnZXRDb2x1bW5JbnQ2NChpbnQg
Y29sKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKGlu
dCBjb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJjOGU5NGMzZDI3MTE5MjNhN2Y1MjBjNmI3MWJiZmYw
NDU3OGZhMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTAs
MCArMSwxNTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgiCisKKyNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIKKyNp
bmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuaCIKKyNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3RhdHVzLmgiCisj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3Rv
cmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0YXRpc3RpY3Mu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9TUUxpdGVTdGF0ZW1lbnQuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+
CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9TdGRTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNkZWZpbmUgUkVM
RUFTRV9MT0dfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZtdCwgLi4uKSBSRUxFQVNFX0xPR19JRihz
ZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE5ldHdvcmssICIlcCAtIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1Nf
XykKKyNkZWZpbmUgUkVMRUFTRV9MT0dfRVJST1JfSUZfQUxMT1dFRChzZXNzaW9uSUQsIGZtdCwg
Li4uKSBSRUxFQVNFX0xPR19FUlJPUl9JRihzZXNzaW9uSUQuaXNBbHdheXNPbkxvZ2dpbmdBbGxv
d2VkKCksIE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIFJFTEVBU0VfTE9H
X0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQsIC4uLikgICgodm9pZCkwKQorI2RlZmluZSBSRUxF
QVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pICAoKHZvaWQpMCkK
KyNlbmRpZgorCitjb25zdGV4cHIgYXV0byBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkgPSAiU0VM
RUNUIENPVU5UKCopIEZST00gT2JzZXJ2ZWREb21haW5zIl9zOworY29uc3RleHByIGF1dG8gaW5z
ZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBPYnNlcnZlZERvbWFpbnMgKHJl
Z2lzdHJhYmxlRG9tYWluLCBsYXN0U2VlbiwgaGFkVXNlckludGVyYWN0aW9uLCIKKyAgICAibW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUsIGdyYW5kZmF0aGVyZWQsIGlzUHJldmFsZW50LCBp
c1ZlcnlQcmV2YWxlbnQsIGRhdGFSZWNvcmRzUmVtb3ZlZCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQ
YXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0
eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSkgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/
LCA/KSJfczsKK2NvbnN0ZXhwciBhdXRvIGluc2VydFRvcExldmVsRG9tYWluUXVlcnkgPSAiSU5T
RVJUIElOVE8gVG9wTGV2ZWxEb21haW5zIFZBTFVFUyAoPykiX3M7Citjb25zdGV4cHIgYXV0byBk
b21haW5JREZyb21TdHJpbmdRdWVyeSA9ICJTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERv
bWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gc3Rv
cmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3RvcmFn
ZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIChkb21haW5JRCwgdG9wTGV2ZWxEb21haW5JRCkg
IgorICAgICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPT0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RzVG9RdWVyeSA9ICJJTlNFUlQgSU5UTyBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIChz
b3VyY2VEb21haW5JRCwgdG9Eb21haW5JRCkgU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0
byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUIDEgRlJPTSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHNvdXJjZURvbWFp
bklEID0gPyAiCisgICAgIkFORCB0b0RvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhw
ciBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5ID0gIklOU0VSVCBJTlRPIFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSAodGFyZ2V0RG9tYWluSUQsIGZyb21Eb21haW5JRCkg
IgorICAgICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUgdGFyZ2V0RG9tYWluSUQgPSA/ICIKKyAgICAi
QU5EIGZyb21Eb21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/KSkiX3M7Citjb25zdGV4cHIgYXV0byBzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWlucyAoc3ViRnJhbWVEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkgIgorICAg
ICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YkZyYW1lRG9tYWluSUQgPSA/ICIKKyAgICAiQU5E
IHRvcEZyYW1lRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8gc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5ID0gIklOU0VSVCBJTlRPIFN1YnJlc291cmNl
VW5kZXJUb3BGcmFtZURvbWFpbnMgKHN1YnJlc291cmNlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
SUQpICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVDVCAxIEZS
T00gU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAiCisgICAgIldIRVJFIHN1YnJlc291
cmNlRG9tYWluSUQgPSA/IEFORCB0b3BGcmFtZURvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBG
Uk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2Nv
bnN0ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSA9ICJJTlNFUlQg
SU5UTyBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIChzdWJyZXNvdXJjZURvbWFpbklELCB0
b0RvbWFpbklEKSAiCisgICAgIlNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlu
cyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0c1F1ZXJ5ID0gIlNFTEVDVCBFWElTVFMgKFNFTEVD
VCAxIEZST00gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURv
bWFpbklEID0gPyAiCisgICAgIkFORCB0b0RvbWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9N
IE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0
ZXhwciBhdXRvIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5ID0gIklOU0VSVCBJ
TlRPIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSAoc3VicmVzb3VyY2VEb21haW5JRCwg
ZnJvbURvbWFpbklEKSAiCisgICAgIlNFTEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9t
YWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAo
U0VMRUNUIDEgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gV0hFUkUgc3VicmVz
b3VyY2VEb21haW5JRCA9ID8gIgorICAgICJBTkQgZnJvbURvbWFpbklEID0gKFNFTEVDVCBkb21h
aW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8pKSJf
czsKK2NvbnN0ZXhwciBhdXRvIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJVUERB
VEUgT2JzZXJ2ZWREb21haW5zIFNFVCBoYWRVc2VySW50ZXJhY3Rpb24gPSA/LCBtb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSA9ID8gIgorICAgICJXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVMYXN0U2VlblF1ZXJ5ID0gIlVQREFURSBPYnNl
cnZlZERvbWFpbnMgU0VUIGxhc3RTZWVuID0gPyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8i
X3M7Citjb25zdGV4cHIgYXV0byB1cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFU
RSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gPyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBpc1ByZXZhbGVudFJlc291cmNlUXVlcnkgPSAi
U0VMRUNUIGlzUHJldmFsZW50IEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxl
RG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHVwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJj
ZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzVmVyeVByZXZhbGVudCA9ID8g
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaXNWZXJ5UHJl
dmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNWZXJ5UHJldmFsZW50IEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0ZXhwciBhdXRv
IGNsZWFyUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNF
VCBpc1ByZXZhbGVudCA9IDAsIGlzVmVyeVByZXZhbGVudCA9IDAgV0hFUkUgcmVnaXN0cmFibGVE
b21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gaGFkVXNlckludGVyYWN0aW9uUXVlcnkgPSAi
U0VMRUNUIGhhZFVzZXJJbnRlcmFjdGlvbiwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUg
RlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29u
c3RleHByIGF1dG8gdXBkYXRlR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERv
bWFpbnMgU0VUIGdyYW5kZmF0aGVyZWQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzR3JhbmRmYXRoZXJlZFF1ZXJ5ID0gIlNFTEVDVCBncmFuZGZh
dGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uUXVlcnkgPSAiU0VM
RUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIGhhZFVzZXJJbnRlcmFjdGlv
biA9IDEgQU5EIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lIDwgPyJfczsKKworY29uc3Rl
eHByIGF1dG8gY3JlYXRlT2JzZXJ2ZWREb21haW4gPSAiQ1JFQVRFIFRBQkxFIE9ic2VydmVkRG9t
YWlucyAoIgorICAgICJkb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCByZWdpc3RyYWJsZURv
bWFpbiBURVhUIE5PVCBOVUxMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBsYXN0U2VlbiBSRUFM
IE5PVCBOVUxMLCAiCisgICAgImhhZFVzZXJJbnRlcmFjdGlvbiBJTlRFR0VSIE5PVCBOVUxMLCBt
b3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBSRUFMIE5PVCBOVUxMLCBncmFuZGZhdGhlcmVk
IElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiaXNQcmV2YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwg
aXNWZXJ5UHJldmFsZW50IElOVEVHRVIgTk9UIE5VTEwsIGRhdGFSZWNvcmRzUmVtb3ZlZCBJTlRF
R0VSIE5PVCBOVUxMLCIKKyAgICAidGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlcklu
dGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVU
b1N0b3JhZ2VBY2Nlc3NBUEkgSU5URUdFUiBOT1QgTlVMTCk7Il9zOworICAgIAorY29uc3RleHBy
IGF1dG8gY3JlYXRlVG9wTGV2ZWxEb21haW5zID0gIkNSRUFURSBUQUJMRSBUb3BMZXZlbERvbWFp
bnMgKCIKKyAgICAidG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIFBSSU1BUlkgS0VZLCBDT05TVFJB
SU5UIGZrRG9tYWluSUQgRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgIgorICAgICJSRUZF
UkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsK
KyAgICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVEFCTEUgU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zICgi
CisgICAgImRvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvcExldmVsRG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCAiCisgICAgIkNPTlNUUkFJTlQgZmtEb21haW5J
RCBGT1JFSUdOIEtFWShkb21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWlu
SUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKHRvcExldmVsRG9tYWlu
SUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVU
RSBDQVNDQURFKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVhdGVUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvICgi
CisgICAgInNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdF
UiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNF
UyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIK
KyAgICAiRk9SRUlHTiBLRVkodG9Eb21haW5JRCkgUkVGRVJFTkNFUyBUb3BMZXZlbERvbWFpbnMo
dG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsKKyAgICAKK2NvbnN0ZXhw
ciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSA9ICJDUkVBVEUgVEFCTEUg
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tICgiCisgICAgInRhcmdldERvbWFpbklEIElOVEVH
RVIgTk9UIE5VTEwsIGZyb21Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJ
R04gS0VZKHRhcmdldERvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZl
bERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9t
YWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERF
TEVURSBDQVNDQURFKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJmcmFtZVVu
ZGVyVG9wRnJhbWVEb21haW5zID0gIkNSRUFURSBUQUJMRSBTdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zICgiCisgICAgInN1YkZyYW1lRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJh
bWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YkZyYW1l
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VT
IFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9z
OworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWlucyA9ICJDUkVBVEUgVEFCTEUgU3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyAoIgor
ICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIHRvcEZyYW1lRG9tYWlu
SUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFp
bklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NB
REUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9wRnJhbWVEb21haW5JRCkgUkVGRVJFTkNFUyBUb3BM
ZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsKKyAg
ICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gPSAi
Q1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic3VicmVz
b3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b0RvbWFpbklEIElOVEVHRVIgTk9UIE5V
TEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3VicmVzb3VyY2VEb21haW5JRCkgUkVGRVJFTkNFUyBP
YnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJ
R04gS0VZKHRvRG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBP
TiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29uc3RleHByIGF1dG8gY3JlYXRlU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb20gKCIKKyAgICAic3VicmVzb3VyY2VEb21haW5JRCBJTlRFR0VSIE5PVCBO
VUxMLCBmcm9tRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAgICJGT1JFSUdOIEtFWShz
dWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkg
T04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkoZnJvbURvbWFpbklEKSBSRUZF
UkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUpOyJfczsK
KyAgICAKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0
b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGlyZWN0b3J5
UGF0aCkKKyAgICA6IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShzdG9yZSwgd29ya1F1ZXVl
KQorICAgICwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aChzdG9yYWdlRGlyZWN0b3J5UGF0aCArICIv
b2JzZXJ2YXRpb25zLmRiIikKKyAgICAsIG1fb2JzZXJ2ZWREb21haW5Db3VudChtX2RhdGFiYXNl
LCBvYnNlcnZlZERvbWFpbkNvdW50UXVlcnkpCisgICAgLCBtX2luc2VydE9ic2VydmVkRG9tYWlu
U3RhdGVtZW50KG1fZGF0YWJhc2UsIGluc2VydE9ic2VydmVkRG9tYWluUXVlcnkpCisgICAgLCBt
X2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50KG1fZGF0YWJhc2UsIGluc2VydFRvcExldmVs
RG9tYWluUXVlcnkpCisgICAgLCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudChtX2RhdGFi
YXNlLCBkb21haW5JREZyb21TdHJpbmdRdWVyeSkKKyAgICAsIG1fc3RvcmFnZUFjY2Vzc1VuZGVy
VG9wRnJhbWVEb21haW5zU3RhdGVtZW50KG1fZGF0YWJhc2UsIHN0b3JhZ2VBY2Nlc3NVbmRlclRv
cEZyYW1lRG9tYWluc1F1ZXJ5KQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvKG1f
ZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSkKKyAgICAsIG1fdG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cyhtX2RhdGFiYXNlLCB0b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvRXhpc3RzUXVlcnkpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSht
X2RhdGFiYXNlLCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSkKKyAgICAsIG1fdG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzKG1fZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbUV4aXN0c1F1ZXJ5KQorICAgICwgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVE
b21haW5zKG1fZGF0YWJhc2UsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSkKKyAg
ICAsIG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzKG1fZGF0YWJhc2UsIHN1YmZy
YW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbnNRdWVyeSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3Rz
KG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0c1F1ZXJ5KQor
ICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKG1fZGF0YWJhc2UsIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9RdWVyeSkKKyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUb0V4aXN0cyhtX2RhdGFiYXNlLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzUXVlcnkpCisgICAgLCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbShtX2RhdGFi
YXNlLCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb21RdWVyeSkKKyAgICAsIG1fc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzRnJvbUV4aXN0c1F1ZXJ5KQorICAgICwgbV9tb3N0UmVjZW50VXNlckludGVy
YWN0aW9uU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25RdWVy
eSkKKyAgICAsIG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgdXBkYXRlTGFz
dFNlZW5RdWVyeSkKKyAgICAsIG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9k
YXRhYmFzZSwgdXBkYXRlUHJldmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1faXNQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpc1ByZXZhbGVudFJlc291cmNlUXVlcnkp
CisgICAgLCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNl
LCB1cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1faXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2VTdGF0ZW1lbnQobV9kYXRhYmFzZSwgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2VR
dWVyeSkKKyAgICAsIG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNl
LCBjbGVhclByZXZhbGVudFJlc291cmNlUXVlcnkpCisgICAgLCBtX2hhZFVzZXJJbnRlcmFjdGlv
blN0YXRlbWVudChtX2RhdGFiYXNlLCBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSkKKyAgICAsIG1f
dXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudChtX2RhdGFiYXNlLCB1cGRhdGVHcmFuZGZhdGhl
cmVkUXVlcnkpCisgICAgLCBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudChtX2RhdGFiYXNlLCBp
c0dyYW5kZmF0aGVyZWRRdWVyeSkKKyAgICAsIG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25T
dGF0ZW1lbnQobV9kYXRhYmFzZSwgZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25RdWVyeSkKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyNlbmRpZgorCisgICAgaWYgKCFt
X2RhdGFiYXNlLm9wZW4obV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpIHsKKyAgICAgICAgUkVMRUFT
RV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBw
YXRoOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9y
YWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU2luY2Ugd2UgYXJl
IHVzaW5nIGEgd29ya2VyUXVldWUsIHRoZSBzZXF1ZW50aWFsIGRpc3BhdGNoIGJsb2NrcyBtYXkg
YmUgY2FsbGVkIGJ5IGRpZmZlcmVudCB0aHJlYWRzLgorICAgIG1fZGF0YWJhc2UuZGlzYWJsZVRo
cmVhZGluZ0NoZWNrcygpOworCisgICAgaWYgKCFtX2RhdGFiYXNlLnRhYmxlRXhpc3RzKCJPYnNl
cnZlZERvbWFpbnMiX3MpKSB7CisgICAgICAgIGlmICghY3JlYXRlU2NoZW1hKCkpIHsKKyAgICAg
ICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
e3B1YmxpY31zLCBkYXRhYmFzZSBwYXRoOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFwcmVwYXJlU3RhdGVtZW50cygpKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpwcmVwYXJlU3RhdGVtZW50cyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxh
c3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHdvcmtRdWV1ZS5kaXNwYXRjaEFmdGVyKDVfcywgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSB7CisgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgIHdlYWtUaGlzLT5jYWxj
dWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsKKyAgICB9KTsKK30KKworYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNFbXB0eSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICBpZiAobV9vYnNlcnZlZERvbWFpbkNvdW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAg
ICByZXN1bHQgPSAhbV9vYnNlcnZlZERvbWFpbkNvdW50LmdldENvbHVtbkludCgwKTsKKyAgICAK
KyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX29ic2VydmVkRG9tYWluQ291bnQucmVzZXQoKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlT2Jz
ZXJ2ZWREb21haW4pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYnNl
cnZlZERvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlVG9w
TGV2ZWxEb21haW5zKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9w
TGV2ZWxEb21haW5zIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFz
dEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVN0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgY3JlYXRlIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBp
biBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNl
Lmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNUbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxh
c3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVU
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJh
c2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucykpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJy
b3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMgdGFibGUgaW4gZGF0YWJh
c2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJy
b3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0
YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIFN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0
RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZXBh
cmVTdGF0ZW1lbnRzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAg
ICAgCisgICAgaWYgKG1fb2JzZXJ2ZWREb21haW5Db3VudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydFRvcExldmVsRG9tYWluU3RhdGVtZW50LnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9kb21haW5JREZyb21TdHJpbmdTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N0b3JhZ2VBY2Nlc3NV
bmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLnBy
ZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb21FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucy5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlu
RXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9zdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20ucHJlcGFyZSgpICE9IFNR
TElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0
cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlTGFzdFNlZW5TdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2Vy
SW50ZXJhY3Rpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2lzVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9jbGVh
clByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2lzR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25T
dGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICApIHsKKyAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OnByZXBhcmVTdGF0ZW1lbnRzIGZhaWxlZCB0byBwcmVwYXJlLCBlcnJvciBtZXNz
YWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIGxvYWRTdGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVChjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGxv
YWRTdGF0aXN0aWNzLnJlZ2lzdHJhYmxlRG9tYWluKSk7CisjZW5kaWYKKworICAgIGlmIChtX2lu
c2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRUZXh0KDEsIGxvYWRTdGF0aXN0aWNzLnJl
Z2lzdHJhYmxlRG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNl
cnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kRG91YmxlKDIsIGxvYWRTdGF0aXN0aWNzLmxh
c3RTZWVuLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCgzLCBsb2FkU3RhdGlz
dGljcy5oYWRVc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2Vy
dE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmREb3VibGUoNCwgbG9hZFN0YXRpc3RpY3MubW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5i
aW5kSW50KDUsIGxvYWRTdGF0aXN0aWNzLmdyYW5kZmF0aGVyZWQpICE9IFNRTElURV9PSworICAg
ICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRJbnQoNiwgbG9hZFN0
YXRpc3RpY3MuaXNQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
aW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg3LCBsb2FkU3RhdGlzdGljcy5p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0
T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg4LCBsb2FkU3RhdGlzdGljcy5kYXRhUmVj
b3Jkc1JlbW92ZWQpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9t
YWluU3RhdGVtZW50LmJpbmRJbnQoOSwgbG9hZFN0YXRpc3RpY3MudGltZXNBY2Nlc3NlZEFzRmly
c3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9p
bnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDEwLCBsb2FkU3RhdGlzdGljcy50
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJKSAhPSBTUUxJVEVf
T0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9tYWluIGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5l
dHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnRP
YnNlcnZlZERvbWFpbiBmYWlsZWQgdG8gY29tbWl0LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31z
IiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IHJlc2V0
UmVzdWx0ID0gbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5yZXNldCgpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYgc3RhdGVt
ZW50LCB1bnNpZ25lZCBmaXJzdERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc2Vj
b25kRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgaWYgKHN0YXRlbWVudC5iaW5kSW50KDEsIGZpcnN0RG9tYWluSUQpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwgc2Vjb25kRG9tYWluLnN0cmluZygpKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9XKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFpblJlbGF0aW9uc2hpcFN0YXRlbWVu
dCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0
YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIHJlbGF0aW9uU2hpcEV4
aXN0cyA9ICEhc3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKworICAgIGludCByZXNldFJlc3Vs
dCA9IHN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJl
c2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHJlbGF0aW9uU2hpcEV4
aXN0czsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCYgc3RhdGVtZW50
LCB1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHN0YXRlbWVudC5i
aW5kSW50KDEsIGRvbWFpbklEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LmJp
bmRUZXh0KDIsIHRvcEZyYW1lLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3Rh
dGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bV9p
bnNlcnREb21haW5SZWxhdGlvbnNoaXBTdGF0ZW1lbnQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBzdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAg
IHJldHVybiB0cnVlOworfQorCisjaWZuZGVmIE5ERUJVRworYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29uZmlybURvbWFpbkRvZXNOb3RFeGlzdChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LmJpbmRUZXh0
KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0IGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
ICAgICAKKyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuc3RlcCgpID09IFNR
TElURV9ST1cpIHsKKyAgICAgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJp
bmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwg
cmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGludCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJl
c2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FM
SVRFX09LKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit1bnNpZ25lZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSUQoY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgIHVuc2lnbmVkIGRvbWFpbklEID0gMDsKKworICAgIGlmIChtX2RvbWFpbklE
RnJvbVN0cmluZ1N0YXRlbWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5zdGVwKCkgIT0g
U1FMSVRFX1JPVykgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluSURGcm9tU3RyaW5nIGZh
aWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVy
cm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGRvbWFpbklEOworICAgIH0KKworICAgIGRvbWFpbklEID0gbV9kb21haW5JREZyb21TdHJpbmdT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV9kb21h
aW5JREZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0
UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIAorICAgIHJldHVybiBkb21h
aW5JRDsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aW5z
ZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiBsb2FkU3RhdGlzdGljcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW5JRCA9IGRvbWFpbklEKGxvYWRTdGF0aXN0aWNz
LnJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9h
ZFN0YXRpc3RpY3Muc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zKQorICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFp
bnNTdGF0ZW1lbnQsIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluKTsKKworICAg
IGZvciAoYXV0byYgdG9Eb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGly
ZWN0c1RvKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvLCByZWdpc3RyYWJsZURvbWFpbklELCB0b0RvbWFpbik7CisgICAgCisgICAg
Zm9yIChhdXRvJiBmcm9tRG9tYWluIDogbG9hZFN0YXRpc3RpY3MudG9wRnJhbWVVbmlxdWVSZWRp
cmVjdHNGcm9tKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQsIGZyb21Eb21haW4pOworICAg
IAorICAgIGZvciAoYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGljcy5zdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW5zKQorICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAo
bV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZWdpc3RyYWJsZURvbWFpbklELCB0b3BG
cmFtZURvbWFpbik7CisgICAgCisgICAgZm9yIChhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRT
dGF0aXN0aWNzLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAgIGluc2Vy
dERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJl
Z2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAKKyAgICBmb3IgKGF1dG8m
IHRvRG9tYWluIDogbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbykK
KyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRp
cmVjdHNUbywgcmVnaXN0cmFibGVEb21haW5JRCwgdG9Eb21haW4pOworICAgIAorICAgIGZvciAo
YXV0byYgZnJvbURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbSkKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNGcm9tLCByZWdpc3RyYWJsZURvbWFpbklELCBmcm9tRG9tYWluKTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cG9wdWxhdGVGcm9t
TWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlJiBtZW1v
cnlTdG9yZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICgh
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvJiBzdGF0aXN0aWNzTWFwID0g
bWVtb3J5U3RvcmUuZGF0YSgpOworICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGlzdGljIDogc3Rh
dGlzdGljc01hcCkKKyAgICAgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4oc3RhdGlzdGljLnZhbHVl
KTsKKworICAgIC8vIE1ha2UgYSBzZXBhcmF0ZSBwYXNzIGZvciBpbnRlci1kb21haW4gcmVsYXRp
b25zaGlwcyBzbyB3ZQorICAgIC8vIGNhbiByZWZlciB0byB0aGUgT2JzZXJ2ZWREb21haW4gdGFi
bGUgZW50cmllcworICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogc3RhdGlzdGljc01hcCkKKyAg
ICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwcyhzdGF0aXN0aWMudmFsdWUpOworCisgICAg
bV9kYXRhYmFzZS5ydW5WYWN1dW1Db21tYW5kKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAvLyBGSVhNRSgxOTUw
ODgpOiBJbXBsZW1lbnQgZm9yIERhdGFiYXNlIHZlcnNpb24uCit9CisKK3N0YXRpYyBTdHJpbmcg
ZG9tYWluc1RvU3RyaW5nKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5z
KQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gZG9tYWluTmFt
ZSA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyInKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZG9tYWluTmFtZS5zdHJpbmcoKSk7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCciJyk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mJiBkb21haW5zKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgU1FMaXRlU3RhdGVtZW50IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudChtX2RhdGFiYXNl
LCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCBkYXRhUmVjb3Jkc1JlbW92
ZWQgPSBkYXRhUmVjb3Jkc1JlbW92ZWQgKyAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgi
LCBkb21haW5zVG9TdHJpbmcoZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjppbmNyZW1lbnRTdGF0aXN0aWNzRm9yRG9tYWlucyBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6
ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWlu
c1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwgU3Rk
U2V0PHVuc2lnbmVkPiYgbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25lZCBu
dW1iZXJPZlJlY3Vyc2l2ZUNhbGxzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPj0gbWF4TnVtYmVyT2ZSZWN1cnNp
dmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2spIHsKKyAgICAgICAgUkVMRUFTRV9MT0coUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcywgIkhpdCAldSByZWN1cnNpdmUgY2FsbHMgaW4gcmVkaXJlY3QgYmFj
a3RyYWNlLiBSZXR1cm5pbmcgZWFybHkuIiwgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVk
aXJlY3RUcmFjZUJhY2spOworICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsK
KyAgICB9CisgICAgCisgICAgKytudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworCisgICAgU3RkU2V0
PHVuc2lnbmVkPiBuZXdseUlkZW50aWZpZWREb21haW5zOworICAgIFNRTGl0ZVN0YXRlbWVudCBm
aW5kU3VicmVzb3VyY2VzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBTdWJyZXNvdXJj
ZVVuaXF1ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIGZyb20gU3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNGcm9tIElOTkVSIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2VydmVkRG9tYWlu
cy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5mcm9tRG9tYWluSUQg
V0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHByaW1hcnlEb21h
aW5JRCksICJBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMCIpKTsKKyAgICBpZiAo
ZmluZFN1YnJlc291cmNlcy5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxl
IChmaW5kU3VicmVzb3VyY2VzLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBh
dXRvIG5ld0RvbWFpbklEID0gZmluZFN1YnJlc291cmNlcy5nZXRDb2x1bW5JbnQoMCk7CisgICAg
ICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNl
cy5pbnNlcnQobmV3RG9tYWluSUQpOworICAgICAgICAgICAgaWYgKGluc2VydFJlc3VsdC5zZWNv
bmQpCisgICAgICAgICAgICAgICAgbmV3bHlJZGVudGlmaWVkRG9tYWlucy5pbnNlcnQobmV3RG9t
YWluSUQpOworICAgICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IGZpbmRUb3BG
cmFtZXMobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20gSU5O
RVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklEID0gVG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSB0YXJnZXREb21haW5J
RCA9ICIsIFN0cmluZzo6bnVtYmVyKHByaW1hcnlEb21haW5JRCksICJBTkQgT2JzZXJ2ZWREb21h
aW5zLmlzUHJldmFsZW50ID0gMCIpKTsKKyAgICBpZiAoZmluZFRvcEZyYW1lcy5wcmVwYXJlKCkg
PT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlIChmaW5kVG9wRnJhbWVzLnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgICAgICBhdXRvIG5ld0RvbWFpbklEID0gZmluZFRvcEZyYW1l
cy5nZXRDb2x1bW5JbnQoMCk7CisgICAgICAgICAgICBhdXRvIGluc2VydFJlc3VsdCA9IG5vblBy
ZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcy5pbnNlcnQobmV3RG9tYWluSUQpOworICAgICAgICAg
ICAgaWYgKGluc2VydFJlc3VsdC5zZWNvbmQpCisgICAgICAgICAgICAgICAgbmV3bHlJZGVudGlm
aWVkRG9tYWlucy5pbnNlcnQobmV3RG9tYWluSUQpOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKG5ld2x5SWRlbnRpZmllZERvbWFpbnMuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bWJl
ck9mUmVjdXJzaXZlQ2FsbHM7CisKKyAgICBmb3IgKGF1dG8gZG9tYWluSUQgOiBuZXdseUlkZW50
aWZpZWREb21haW5zKQorICAgICAgICBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzID0gcmVjdXJzaXZl
bHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGRvbWFp
bklELCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIG51bWJlck9mUmVjdXJzaXZlQ2Fs
bHMpOworCisgICAgcmV0dXJuIG51bWJlck9mUmVjdXJzaXZlQ2FsbHM7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBJdGVyYXRvclR5cGU+CitzdGF0aWMgU3RyaW5nIGJ1aWxkTGlzdChjb25zdCBX
VEY6Okl0ZXJhdG9yUmFuZ2U8SXRlcmF0b3JUeXBlPiYgdmFsdWVzKQoreworICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8gZG9tYWluSUQgOiB2YWx1ZXMpIHsKKyAgICAg
ICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIoZG9tYWluSUQpOworICAg
IH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRU
b1ByZXZhbGVudCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBT
dGRTZXQ8dW5zaWduZWQ+IHByZXZhbGVudER1ZVRvUmVkaXJlY3Q7CisgICAgU1FMaXRlU3RhdGVt
ZW50IHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBESVNU
SU5DVCBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLnN1YnJlc291cmNlRG9tYWluSUQgRlJP
TSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9i
c2VydmVkRG9tYWlucy5kb21haW5JRCA9IFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8udG9E
b21haW5JRCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYg
KHN1YnJlc291cmNlUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewor
ICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VSZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FM
SVRFX1JPVykKKyAgICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHN1YnJl
c291cmNlUmVkaXJlY3RTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgdG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VM
RUNUIERJU1RJTkNUIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc291cmNlRG9tYWluSUQgRlJP
TSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvIEpPSU4gT2JzZXJ2ZWREb21haW5zIE9OIE9ic2Vy
dmVkRG9tYWlucy5kb21haW5JRCA9IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8udG9Eb21haW5J
RCBBTkQgT2JzZXJ2ZWREb21haW5zLmlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHRvcEZy
YW1lUmVkaXJlY3RTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3
aGlsZSAodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAg
ICAgICAgICAgIHByZXZhbGVudER1ZVRvUmVkaXJlY3QuaW5zZXJ0KHRvcEZyYW1lUmVkaXJlY3RT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQg
bWFya1ByZXZhbGVudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2Jz
ZXJ2ZWREb21haW5zIFNFVCBpc1ByZXZhbGVudCA9IDEgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGJ1
aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8U3RkU2V0PHVuc2lnbmVkPjo6aXRlcmF0b3I+KHBy
ZXZhbGVudER1ZVRvUmVkaXJlY3QuYmVnaW4oKSwgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5lbmQo
KSkpLCAiKSIpKTsKKyAgICBpZiAobWFya1ByZXZhbGVudFN0YXRlbWVudC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCisgICAgICAgIHx8IG1hcmtQcmV2YWxlbnRTdGF0ZW1lbnQuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJZkhhc1Jl
ZGlyZWN0ZWRUb1ByZXZhbGVudCBmYWlsZWQgdG8gZXhlY3V0ZSwgZXJyb3IgbWVzc2FnZTogJXtw
dWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK0hhc2hNYXA8dW5zaWduZWQsIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZmluZE5vdFZlcnlQcmV2YWxlbnRS
ZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgSGFz
aE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVudFJlc291cmNlcz4gcmVzdWx0czsKKyAgICBT
UUxpdGVTdGF0ZW1lbnQgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudChtX2RhdGFi
YXNlLCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgaXNQcmV2YWxlbnQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaXNWZXJ5UHJldmFsZW50ID0gMCJfcyk7CisgICAgaWYg
KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9P
SykgeworICAgICAgICB3aGlsZSAobm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5z
dGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWduZWQga2V5ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApKTsKKyAgICAgICAgICAgIE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgdmFsdWUo
eyBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJvbVJlZ2lzdHJhYmxlRG9tYWlu
U3RyaW5nKG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgx
KSkKKyAgICAgICAgICAgICAgICAsIG5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXNTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDIpID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNl
TG9hZFByZXZhbGVuY2U6OkxvdworICAgICAgICAgICAgICAgICwgMCwgMCwgMCwgMCB9KTsKKyAg
ICAgICAgICAgIHJlc3VsdHMuYWRkKGtleSwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorCisg
ICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byB2YWx1ZSA6IHJlc3VsdHMu
a2V5cygpKSB7CisgICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkpCisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kTnVtYmVy
KHZhbHVlKTsKKyAgICB9CisKKyAgICBhdXRvIGRvbWFpbklEc09mSW50ZXJlc3QgPSBidWlsZGVy
LnRvU3RyaW5nKCk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVz
b3VyY2VEb21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFp
bklEc09mSW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAg
aWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQucHJlcGFyZSgpID09
IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluc1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgdW5zaWdu
ZWQgZG9tYWluSUQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1
YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gU3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNUbyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBkb21haW5JRHNP
ZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOworICAgIGlmIChz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNR
TElURV9PSykgeworICAgICAgICB3aGlsZSAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0Nv
dW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQg
IT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNv
dXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIHN1
YnJlc291cmNlRG9tYWluSUQsIENPVU5UKHRvcEZyYW1lRG9tYWluSUQpIEZST00gU3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBzdWJyZXNvdXJjZURvbWFpbklEIElOICgiLCBk
b21haW5JRHNPZkludGVyZXN0LCAiKSBHUk9VUCBCWSBzdWJyZXNvdXJjZURvbWFpbklEIikpOwor
ICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQucHJlcGFy
ZSgpID09IFNRTElURV9PSykgeworICAgICAgICB3aGlsZSAoc3ViZnJhbWVVbmRlclRvcEZyYW1l
RG9tYWluc0NvdW50U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5kKGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlm
IChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVl
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
PihzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnRTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCB0b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VM
RUNUIHNvdXJjZURvbWFpbklELCBDT1VOVCh0b0RvbWFpbklEKSBGUk9NIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJl
c3QsICIpIEdST1VQIEJZIHNvdXJjZURvbWFpbklEIikpOworICAgIGlmICh0b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgeworICAg
ICAgICB3aGlsZSAodG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50U3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5JRCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50KDApKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmVzdWx0cy5maW5k
KGRvbWFpbklEKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT0gcmVzdWx0cy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRT
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biByZXN1bHRzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpyZWNsYXNzaWZ5UmVzb3VyY2VzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGF1dG8gbm90VmVyeVByZXZhbGVudFJlc291cmNlcyA9IGZpbmROb3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzKCk7CisKKyAgICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDog
bm90VmVyeVByZXZhbGVudFJlc291cmNlcy52YWx1ZXMoKSkgeworICAgICAgICBhdXRvIG5ld1By
ZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291
cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3Vy
Y2VTdGF0aXN0aWMuc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0
YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHJlc291cmNlU3RhdGlz
dGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgcmVzb3VyY2VTdGF0aXN0aWMucHJl
dmFsZW5jZSk7CisgICAgICAgIGlmIChuZXdQcmV2YWxlbmNlICE9IHJlc291cmNlU3RhdGlzdGlj
LnByZXZhbGVuY2UpCisgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0
YXRpc3RpYy5yZWdpc3RlcmFibGVEb21haW4sIG5ld1ByZXZhbGVuY2UpOworICAgIH0KK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xhc3NpZnlQcmV2YWxl
bnRSZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIGVu
c3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIG1hcmtBc1ByZXZhbGVu
dElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KCk7CisgICAgcmVjbGFzc2lmeVJlc291cmNlcygp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3Rv
cmFnZUlmTmVlZGVkKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBt
X2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9kYXRhYmFzZS5ydW5WYWN1dW1Db21tYW5k
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0
b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBU
b3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQs
IFBhZ2VJRCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7
CisKKyAgICBzd2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJGcmFtZURvbWFpbikp
IHsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZToKKyAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
b29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcDoKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRyZWF0bWVudFJl
c3VsdDo6QWxsb3c6CisgICAgICAgIC8vIERvIG5vdGhpbmcKKyAgICAgICAgYnJlYWs7CisgICAg
fTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKHN0b3Jl
KCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BG
cmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdl
SUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgIHN0b3JlLT5jYWxsSGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxl
cihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlE
LCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0
b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0XSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmIHN1YkZyYW1lRG9tYWlu
LCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBGcmFtZUlEIGZyYW1lSUQsIFBhZ2VJ
RCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9y
YWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNv
dXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisKKyAg
ICBzd2l0Y2ggKGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihzdWJGcmFtZURvbWFpbikpIHsKKyAg
ICBjYXNlIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTogeworICAgICAgICBS
RUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMg
c2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgYW5k
IGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBz
dWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpC
bG9ja0FuZEtlZXA6IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdF
bmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIk5vIG5lZWQgdG8gZ3JhbnQg
c3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMgY29va2llcyBhcmUgbm90IGJs
b2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NT
dGF0dXM6Okhhc0FjY2Vzcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxvdzoKKyAgICAgICAgLy8gRG8gbm90aGluZworICAg
ICAgICBicmVhazsKKyAgICB9OworCisgICAgYXV0byB1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyID0g
cHJvbXB0RW5hYmxlZCAmJiBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0
KHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgIGlmIChwcm9tcHRF
bmFibGVkICYmICF1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJBYm91dCB0byBhc2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3Rv
cmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31zIG9yIG5vdC4iLCBzdWJG
cmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vz
c1N0YXR1czo6UmVxdWlyZXNVc2VyUHJvbXB0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKQorICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
U3RvcmFnZSBhY2Nlc3Mgd2FzIGdyYW50ZWQgdG8gJXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31z
LiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IGluY3JlbWVu
dFN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9t
YWlucyBTRVQgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSA9
IHRpbWVzQWNjZXNzZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkgKyAxIFdIRVJF
IGRvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIoc3ViRnJhbWVTdGF0dXMuc2Vjb25kKSkpOwor
ICAgIGlmIChpbmNyZW1lbnRTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgaW5jcmVtZW50U3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsK
KyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzIGZhaWxlZCwgZXJyb3Ig
bWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgZ3JhbnRTdG9y
YWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJh
bWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIsIFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYm9vbCB3YXNHcmFu
dGVkQWNjZXNzKSBtdXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3JhbnRl
ZEFjY2VzcyA/IFN0b3JhZ2VBY2Nlc3NTdGF0dXM6Okhhc0FjY2VzcyA6IFN0b3JhZ2VBY2Nlc3NT
dGF0dXM6OkNhbm5vdFJlcXVlc3RBY2Nlc3MpOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFj
Y2VzcywgT3BlbmVyUGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYgb3BlbmVyRG9t
YWluKQoreworICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgIT0gb3BlbmVy
RG9tYWluKTsKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChkb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPT0gb3BlbmVyRG9tYWluKQorICAgICAgICByZXR1cm47
CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpOworCisgICAgaWYgKGNvb2tpZVRyZWF0bWVudEZvck9y
aWdpbihkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpICE9IENvb2tpZVRyZWF0bWVudFJlc3Vs
dDo6QWxsb3cpCisgICAgICAgIHJldHVybjsKKworICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVi
dWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9y
YXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtw
dWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRl
cmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3Muc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoZG9tYWluSW5O
ZWVkT2ZTdG9yYWdlQWNjZXNzKSwgV1RGTW92ZShvcGVuZXJEb21haW4pLCBXVEY6Om51bGxvcHQs
IG9wZW5lclBhZ2VJRCwgZmFsc2UsIFtdKGJvb2wpIHsgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURv
bWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKHVzZXJXYXNQcm9tcHRl
ZE5vdykgeworICAgICAgICBhdXRvIHN1YkZyYW1lU3RhdHVzID0gZW5zdXJlUmVzb3VyY2VTdGF0
aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworICAgICAgICBBU1NF
UlQoc3ViRnJhbWVTdGF0dXMuZmlyc3QgPT0gQWRkZWRSZWNvcmQ6Ok5vKTsKKyAgICAgICAgQVNT
RVJUKGhhc0hhZFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbikpOworICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNT
dGF0ZW1lbnQsIHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgIH0K
KworICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3ViRnJhbWVEb21haW4p
LCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0
ZWROb3csIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3Vi
RnJhbWVEb21haW4mJiBzdWJGcmFtZURvbWFpbiwgVG9wRnJhbWVEb21haW4mJiB0b3BGcmFtZURv
bWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYg
Y2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAo
c3ViRnJhbWVEb21haW4gPT0gdG9wRnJhbWVEb21haW4pIHsKKyAgICAgICAgY2FsbGJhY2sodHJ1
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIG1fc3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBpcyBubyBsb25nZXIg
ZXhwZXJpbWVudGFsLgorICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVhcmxpZXIgJiYgc3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCkpIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIGF1
dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0YXR1cy5m
aXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOworICAgICAgICBBU1NFUlQoaGFzSGFkVXNlckludGVy
YWN0aW9uKHN1YkZyYW1lRG9tYWluKSk7CisgICAgICAgIEFTU0VSVChoYXNVc2VyR3JhbnRlZFN0
b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHN1YkZyYW1lU3RhdHVzLnNlY29uZCwgdG9wRnJhbWVE
b21haW4pKTsKKyNlbmRpZgorICAgICAgICBzZXRVc2VySW50ZXJhY3Rpb24oc3ViRnJhbWVEb21h
aW4sIHRydWUsIFdhbGxUaW1lOjpub3coKSk7CisgICAgfQorCisgICAgUnVuTG9vcDo6bWFpbigp
LmRpc3BhdGNoKFtzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgp
LCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlE
LCBwYWdlSUQsIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3JhZ2VBY2Nl
c3NIYW5kbGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlE
LCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCld
KGJvb2wgdmFsdWUpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1
ZSgpLmRpc3BhdGNoKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB2YWx1ZV0gKCkgbXV0
YWJsZSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworICAgIH0pOworCit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxS
ZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1f
ZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGdyYW5kZmF0
aGVyZWQgPSAxIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluIElOICgiLCBkb21haW5zVG9TdHJpbmco
ZG9tYWlucyksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQucHJlcGFy
ZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpncmFuZGZhdGhlckRh
dGFGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1f
ZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoIWRlYnVnTW9k
ZUVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworICAgIHByaW1hcnlEb21haW5zVG9CbG9j
ay5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsK
KyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCks
IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgIHByaW1hcnlEb21haW5zVG9CbG9j
ay51bmNoZWNrZWRBcHBlbmQoZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSgpKTsKKworICAg
IGlmICghZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpLmlzRW1wdHkoKSkgeworICAgICAg
ICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlKCkpOworICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCksIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gp
OworICAgICAgICBwcmltYXJ5RG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKSk7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCBy
ZXNvdXJjZSBmb3IgdGhlIHB1cnBvc2VzIG9mIElUUCBEZWJ1ZyBNb2RlLiIsIGRlYnVnTWFudWFs
UHJldmFsZW50UmVzb3VyY2UoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gcHJpbWFyeURvbWFpbnNUb0Jsb2NrOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1l
RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9tYWluLCBib29sIGlzUmVk
aXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7CisKKyAgICBib29sIGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlID0gdGFy
Z2V0RG9tYWluID09IHRvcEZyYW1lRG9tYWluOworICAgIGJvb2wgYXJlVGFyZ2V0QW5kU291cmNl
RG9tYWluc1NhbWVTaXRlID0gdGFyZ2V0RG9tYWluID09IHNvdXJjZURvbWFpbjsKKworICAgIGJv
b2wgc3RhdGlzdGljc1dlcmVVcGRhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc01haW5GcmFtZSAm
JiAhKGFyZVRhcmdldEFuZFRvcEZyYW1lRG9tYWluc1NhbWVTaXRlIHx8IGFyZVRhcmdldEFuZFNv
dXJjZURvbWFpbnNTYW1lU2l0ZSkpIHsKKyAgICAgICAgYXV0byB0YXJnZXRSZXN1bHQgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4pOwor
ICAgICAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXREb21haW4sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3M6OnJlZHVjZVRpbWVSZXNvbHV0aW9uKFdhbGxUaW1lOjpub3coKSkpOworCisgICAgICAgIGlm
ICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluRXhpc3Rz
LCB0YXJnZXRSZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICAgICAgICAgIGlu
c2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHRh
cmdldFJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKKyAgICAgICAgICAgIHN0YXRpc3Rp
Y3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoaXNSZWRp
cmVjdCAmJiAhYXJlVGFyZ2V0QW5kU291cmNlRG9tYWluc1NhbWVTaXRlKSB7CisgICAgICAgIGlm
IChpc01haW5GcmFtZSkgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJlc3Vs
dCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJjZURv
bWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzVG9FeGlzdHMsIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29uZCwgdGFy
Z2V0RG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcCht
X3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8sIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29u
ZCwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQg
PSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFp
bik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3RvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbUV4aXN0cywgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKSkg
eworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKTsKKyAg
ICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byByZWRpcmVjdGluZ0RvbWFpblJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHNvdXJj
ZURvbWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHMsIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0LnNlY29u
ZCwgdGFyZ2V0RG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9u
c2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlZGlyZWN0aW5nRG9tYWluUmVz
dWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2Vy
ZVVwZGF0ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIHRhcmdl
dFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRh
cmdldERvbWFpbik7CisgICAgICAgICAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0cywgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291
cmNlRG9tYWluKSkgeworICAgICAgICAgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcCht
X3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgdGFyZ2V0UmVzdWx0LnNlY29uZCwgc291
cmNlRG9tYWluKTsKKyAgICAgICAgICAgICAgICBzdGF0aXN0aWNzV2VyZVVwZGF0ZWQgPSB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0YXRpc3RpY3NX
ZXJlVXBkYXRlZCkKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
Zk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHRhcmdl
dERvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBs
YXN0U2VlbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8g
cmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFy
Z2V0RG9tYWluKTsKKyAgICB1cGRhdGVMYXN0U2Vlbih0YXJnZXREb21haW4sIGxhc3RTZWVuKTsK
KworICAgIGF1dG8gdGFyZ2V0RG9tYWluSUQgPSByZXN1bHQuc2Vjb25kOworICAgIGlmICghcmVs
YXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzLCB0
YXJnZXREb21haW5JRCwgdG9wRnJhbWVEb21haW4pKSB7CisgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnMsIHRhcmdldERvbWFp
bklELCB0b3BGcmFtZURvbWFpbik7CisgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3Np
bmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJl
Y3RlZEZyb21Eb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiB0
YXJnZXREb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHNvdXJjZURvbWFpblJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKHNvdXJjZURvbWFpbik7CisgICAgYXV0byB0YXJnZXREb21haW5SZXN1bHQg
PSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21h
aW4pOworCisgICAgYm9vbCBpc05ld1JlZGlyZWN0VG9FbnRyeSA9IGZhbHNlOworICAgIGlmICgh
cmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cywg
c291cmNlRG9tYWluUmVzdWx0LnNlY29uZCwgdGFyZ2V0RG9tYWluKSkgeworICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCBzb3Vy
Y2VEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pOworICAgICAgICBpc05ld1JlZGly
ZWN0VG9FbnRyeSA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBpc05ld1JlZGlyZWN0RnJvbUVu
dHJ5ID0gZmFsc2U7CisgICAgaWYgKCFyZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHMsIHRhcmdldERvbWFpblJlc3VsdC5zZWNvbmQsIHNvdXJj
ZURvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tLCB0YXJnZXREb21haW5SZXN1bHQuc2Vjb25kLCBzb3VyY2VE
b21haW4pOworICAgICAgICBpc05ld1JlZGlyZWN0RnJvbUVudHJ5ID0gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoaXNOZXdSZWRpcmVjdFRvRW50cnkgfHwgaXNOZXdSZWRpcmVjdEZyb21FbnRyeSkK
KyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgp
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9vbCBoYWRVc2Vy
SW50ZXJhY3Rpb24sIFdhbGxUaW1lIG1vc3RSZWNlbnRJbnRlcmFjdGlvbikKK3sKKyAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX21vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25TdGF0ZW1lbnQuYmluZEludCgxLCBoYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIHx8
IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5iaW5kRG91YmxlKDIsIG1vc3RS
ZWNlbnRJbnRlcmFjdGlvbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZFRl
eHQoMywgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VXNlckludGVyYWN0aW9uLCBlcnJvciBtZXNzYWdlOiAle3B1
YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaW50IHJlc2V0
UmVzdWx0ID0gbV9tb3N0UmVjZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6bG9nVXNlcklu
dGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOworICAgIHNldFVzZXJJbnRlcmFjdGlvbihkb21haW4sIHRy
dWUsIFdhbGxUaW1lOjpub3coKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgZmFsc2UsIHsgfSk7
CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVtb3ZlU3RvcmFnZUFjY2VzcyhtX2RhdGFiYXNlLCBt
YWtlU3RyaW5nKCJERUxFVEUgRlJPTSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMg
V0hFUkUgZG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcih0YXJnZXRSZXN1bHQuc2Vjb25kKSkp
OworICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgcmVtb3ZlU3RvcmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmxvZ1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJy
b3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkp
OworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgaWYgKG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmRUZXh0
KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faGFkVXNlcklu
dGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCBmYWlsZWQsIGVycm9y
IG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9ICEhbV9oYWRVc2VySW50ZXJhY3Rp
b25TdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworICAgIGlmICghaGFkVXNlckludGVyYWN0aW9u
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2FsbFRpbWUgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblRpbWUgPSBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMobV9oYWRVc2VySW50
ZXJhY3Rpb25TdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDEpKTsKKworICAgIGlmIChoYXNTdGF0
aXN0aWNzRXhwaXJlZChtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkpIHsKKyAgICAgICAg
Ly8gRHJvcCBwcml2YWN5IHNlbnNpdGl2ZSBkYXRhIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIG5lZWQg
aXQuCisgICAgICAgIC8vIFNldCB0aW1lc3RhbXAgdG8gMCBzbyB0aGF0IHN0YXRpc3RpY3MgbWVy
Z2Ugd2lsbCBrbm93CisgICAgICAgIC8vIGl0IGhhcyBiZWVuIHJlc2V0IGFzIG9wcG9zZWQgdG8g
aXRzIGRlZmF1bHQgLTEuCisgICAgICAgIGNsZWFyVXNlckludGVyYWN0aW9uKGRvbWFpbik7Cisg
ICAgICAgIGhhZFVzZXJJbnRlcmFjdGlvbiA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gaGFkVXNlckludGVyYWN0aW9uOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIG5ld1ByZXZhbGVuY2UpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV91cGRhdGVQcmV2YWxlbnRS
ZXNvdXJjZVN0YXRlbWVudC5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmJpbmRUZXh0KDIsIGRvbWFpbi5zdHJp
bmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VT
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
bnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnJlc2V0
KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRF
X09LKTsKKworICAgIGlmIChuZXdQcmV2YWxlbmNlID09IFJlc291cmNlTG9hZFByZXZhbGVuY2U6
OlZlcnlIaWdoKSB7CisgICAgICAgIGlmIChtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0
YXRlbWVudC5iaW5kSW50KDEsIDEpICE9IFNRTElURV9PSworICAgICAgICAgICAgfHwgbV91cGRh
dGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluLnN0cmlu
ZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgIHx8IG1fdXBkYXRlVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6Om1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwg
ZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCkpOworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX3VwZGF0ZVZlcnlQ
cmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5yZXNldCgpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIH0KKworICAgIFN0
ZFNldDx1bnNpZ25lZD4gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzOworICAgIHJlY3Vy
c2l2ZWx5RmluZE5vblByZXZhbGVudERvbWFpbnNUaGF0UmVkaXJlY3RlZFRvVGhpc0RvbWFpbihk
b21haW5JRChkb21haW4pLCBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIDApOworICAg
IHNldERvbWFpbnNBc1ByZXZhbGVudChXVEZNb3ZlKG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291
cmNlcykpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpz
ZXREb21haW5zQXNQcmV2YWxlbnQoU3RkU2V0PHVuc2lnbmVkPiYmIGRvbWFpbnMpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZG9tYWlu
c1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRM
aXN0KFdURjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWlu
cy5iZWdpbigpLCBkb21haW5zLmVuZCgpKSksICIpIikpOworICAgIGlmIChkb21haW5zVG9VcGRh
dGVTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBkb21haW5zVG9V
cGRhdGVTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0Vf
TE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXREb21haW5zQXNQcmV2YWxlbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1Ymxp
Y31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitTdHJpbmcgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJ
WE1FKDE5NTA4OCk6IEltcGxlbWVudCBTUUxpdGUtYmFzZWQgZHVtcGluZyByb3V0aW5lcy4KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitib29sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbihX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmIHByZWRpY2F0ZVN0YXRlbWVudCwgY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAKKyAgICBpZiAocHJlZGljYXRlU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFp
bi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IHByZWRpY2F0ZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZh
bHVlRm9yRG9tYWluIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCByZXN1bHQg
PSAhIXByZWRpY2F0ZVN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgaW50IHJlc2V0UmVz
dWx0ID0gcHJlZGljYXRlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNl
dFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZhbGVu
dFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVG
b3JEb21haW4obV9pc1ByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LCBkb21haW4pOworfQorCiti
b29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAoreworICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHByZWRpY2F0ZVZhbHVlRm9y
RG9tYWluKG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisK
K2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFz
U3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3VyY2VEb21h
aW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiByZWxhdGlvbnNoaXBFeGlz
dHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIGRvbWFpbklEKHN1YnJl
c291cmNlRG9tYWluKSwgdG9wRnJhbWVEb21haW4pOworfQorCitib29sIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3Qg
U3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9w
RnJhbWVEb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICByZXR1cm4gcmVsYXRpb25zaGlwRXhpc3RzKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluRXhpc3RzLCBkb21haW5JRChzdWJGcmFtZURvbWFpbiksIHRvcEZyYW1lRG9tYWluKTsKK30K
KworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRpcmVjdGVkRnJv
bURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9Eb21haW4pIGNv
bnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcmVs
YXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0cywgZG9t
YWluSUQocmVkaXJlY3RlZEZyb21Eb21haW4pLCByZWRpcmVjdGVkVG9Eb21haW4pOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJl
c291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOworICAgIAorICAgIGlmIChtX2NsZWFyUHJldmFsZW50UmVz
b3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJj
ZSwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2NsZWFyUHJldmFsZW50UmVzb3Vy
Y2VTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNl
dFJlc3VsdCA9PSBTUUxJVEVfT0spOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4p
OworICAgIAorICAgIGlmIChtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQuYmluZEludCgx
LCB2YWx1ZSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0
YXRlbWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAg
ICB8fCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRHcmFuZGZhdGhlcmVkIGZhaWxlZCB0byBiaW5k
LCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0
YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVz
dWx0ID09IFNRTElURV9PSyk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWlu
KSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJu
IHByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50LCBkb21h
aW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRT
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1l
RG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291
cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAg
IC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3Mg
ZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIGluc2VydERv
bWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlc3VsdC5z
ZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1
YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4m
IHRvcEZyYW1lRG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ug
c3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgdG9wIGZyYW1lIGRv
bWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
b3BGcmFtZURvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLCByZXN1bHQuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3VicmVzb3VyY2VEb21haW4pOwor
CisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlz
dGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0
YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCByZXN1
bHQuc2Vjb25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21h
aW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
CisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBGb3IgY29uc2lzdGVuY3ksIG1h
a2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5IGZvciB0aGUgcmVkaXJlY3Qg
ZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KHJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVzdWx0LnNlY29uZCwgcmVkaXJlY3REb21haW4p
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWlu
LCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKKworICAgIC8vIEZv
ciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkg
Zm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbywgcmVzdWx0LnNlY29uZCwgcmVk
aXJlY3REb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYg
dG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4p
OworCisgICAgLy8gRm9yIGNvbnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3Rh
dGlzdGljcyBlbnRyeSBmb3IgdGhlIHJlZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20sIHJl
c3VsdC5zZWNvbmQsIHJlZGlyZWN0RG9tYWluKTsKK30KKworc3RkOjpwYWlyPFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpBZGRlZFJlY29yZCwgdW5zaWduZWQ+IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3Ry
aW5nU3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4geyBBZGRlZFJlY29yZDo6Tm8s
IDAgfTsKKyAgICB9CisgICAgCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50
LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gbV9k
b21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgICAgIGlu
dCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9P
Syk7CisgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgZG9tYWluSUQgfTsKKyAgICB9
CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5y
ZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNR
TElURV9PSyk7CisKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG5ld09ic2VydmF0aW9uKGRv
bWFpbik7CisgICAgaW5zZXJ0T2JzZXJ2ZWREb21haW4obmV3T2JzZXJ2YXRpb24pOworCisgICAg
cmV0dXJuIHsgQWRkZWRSZWNvcmQ6OlllcywgZG9tYWluSUQoZG9tYWluKSB9OworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyAgICBjbGVhck9wZXJhdGluZ0RhdGVzKCk7CisKKyAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKKworICAgIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoW2NhbGxiYWNr
QWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsgfSk7CisKKyAgICBh
dXRvIHByaW1hcnlEb21haW5zVG9CbG9jayA9IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRl
YnVnTW9kZSgpOworICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhwcmltYXJ5RG9t
YWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29w
eVJlZigpXSB7IH0pOworfQorCitSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
Q29va2llVHJlYXRtZW50UmVzdWx0IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojpjb29raWVUcmVhdG1lbnRGb3JPcmlnaW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFp
bikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIGlzUHJl
dmFsZW50LCBoYWRVc2VySW50ZXJhY3Rpb24gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSAiLCBkb21haW4uc3RyaW5nKCkpKTsKKyAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKSB7CisgICAgICAgIHJldHVybiBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkFsbG93
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzUHJldmFsZW50ID0gISFzdGF0ZW1lbnQuZ2V0Q29s
dW1uSW50KDApOworICAgIGlmICghaXNQcmV2YWxlbnQpCisgICAgICAgIHJldHVybiBDb29raWVU
cmVhdG1lbnRSZXN1bHQ6OkFsbG93OworCisgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDEpID8gdHJ1ZSA6IGZhbHNlOworICAgIHJldHVybiBoYWRV
c2VySW50ZXJhY3Rpb24gPyBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2VlcCA6IENv
b2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRQdXJnZTsKK30KKyAgICAKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vz
c1Rocm91Z2hQcm9tcHQodW5zaWduZWQgcmVxdWVzdGluZ0RvbWFpbklELCBjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYgZmlyc3RQYXJ0eURvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCA9IGRv
bWFpbklEKGZpcnN0UGFydHlEb21haW4pOworCisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBTdG9yYWdlQWNj
ZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgV0hFUkUgZG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJl
cihyZXF1ZXN0aW5nRG9tYWluSUQpLCAiIEFORCB0b3BMZXZlbERvbWFpbklEID0gIiwgU3RyaW5n
OjpudW1iZXIoZmlyc3RQYXJ0eVByaW1hcnlEb21haW5JRCkpKTsKKyAgICBpZiAoc3RhdGVtZW50
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgc3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gIXN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCk7Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbnNUb0Jsb2NrKCkgY29uc3QKK3sK
KyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gcmVzdWx0czsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsICJTRUxFQ1QgcmVnaXN0cmFibGVEb21haW4gRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUg
aXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0spCisgICAgICAgIHJldHVybiByZXN1bHRzOworICAgIAorICAgIHdoaWxlIChzdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcoc3Rh
dGVtZW50LmdldENvbHVtblRleHQoMCkpKTsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVDb29raWVCbG9j
a2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIGRvbWFpbnNUb0Jsb2Nr
ID0gdGhpcy0+ZG9tYWluc1RvQmxvY2soKTsKKworICAgIGlmIChkb21haW5zVG9CbG9jay5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChkZWJ1Z0xvZ2dpbmdFbmFibGVkKCkgJiYgIWRvbWFpbnNUb0Jsb2Nr
LmlzRW1wdHkoKSkKKyAgICAgICAgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKCJibG9jayIsIGRv
bWFpbnNUb0Jsb2NrKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgZG9tYWluc1Rv
QmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgc3Rv
cmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRv
bWFpbnNUb0Jsb2NrLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUgPSBzdG9y
ZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlz
cGF0Y2goW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRih3ZWFrVGhpcy0+ZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworVmVjdG9yPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpQcmV2YWxlbnREb21haW5EYXRhPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJldmFsZW50RG9tYWlucygpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgVmVjdG9yPFByZXZhbGVudERvbWFp
bkRhdGE+IHJlc3VsdHM7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNl
LCAiU0VMRUNUIGRvbWFpbklELCByZWdpc3RyYWJsZURvbWFpbiwgbW9zdFJlY2VudFVzZXJJbnRl
cmFjdGlvblRpbWUsIGhhZFVzZXJJbnRlcmFjdGlvbiwgZ3JhbmRmYXRoZXJlZCBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVudCA9IDEiX3MpOworICAgIGlmIChzdGF0ZW1lbnQu
cHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisg
ICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykgeworICAgICAgICByZXN1
bHRzLmFwcGVuZCh7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50
KDApKQorICAgICAgICAgICAgLCBSZWdpc3RyYWJsZURvbWFpbjo6dW5jaGVja2VkQ3JlYXRlRnJv
bVJlZ2lzdHJhYmxlRG9tYWluU3RyaW5nKHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQorICAg
ICAgICAgICAgLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc3RhdGVtZW50LmdldENvbHVtbkRv
dWJsZSgyKSkKKyAgICAgICAgICAgICwgc3RhdGVtZW50LmdldENvbHVtbkludCgzKSA/IHRydWUg
OiBmYWxzZQorICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDQpID8gdHJ1ZSA6
IGZhbHNlCisgICAgICAgIH0pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0czsKK30K
KworVmVjdG9yPHVuc2lnbmVkPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
ZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gcmVzdWx0czsKKyAgICBPcHRp
b25hbDxTZWNvbmRzPiBleHBpcmF0aW9uRGF0ZVRpbWUgPSBzdGF0aXN0aWNzRXBpcmF0aW9uVGlt
ZSgpOworICAgIGlmICghZXhwaXJhdGlvbkRhdGVUaW1lKQorICAgICAgICByZXR1cm4gcmVzdWx0
czsKKworICAgIGlmIChtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmRE
b3VibGUoMSwgZXhwaXJhdGlvbkRhdGVUaW1lLnZhbHVlKCkudmFsdWUoKSkgIT0gU1FMSVRFX09L
KQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKworICAgIHdoaWxlIChtX2ZpbmRFeHBpcmVkVXNl
ckludGVyYWN0aW9uU3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICByZXN1
bHRzLmFwcGVuZChtX2ZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9uU3RhdGVtZW50LmdldENvbHVt
bkludCgwKSk7CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2ZpbmRFeHBpcmVkVXNlckludGVy
YWN0aW9uU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwg
cmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIHJldHVybiByZXN1bHRzOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckV4cGlyZWRVc2Vy
SW50ZXJhY3Rpb25zKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGF1dG8gZXhwaXJlZFJlY29yZHMgPSBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAg
ICBpZiAoZXhwaXJlZFJlY29yZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIGV4cGlyZWRSZWNvcmRJRHMgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rv
cjx1bnNpZ25lZD46Oml0ZXJhdG9yPihleHBpcmVkUmVjb3Jkcy5iZWdpbigpLCBleHBpcmVkUmVj
b3Jkcy5lbmQoKSkpOworCisgICAgU1FMaXRlU3RhdGVtZW50IGNsZWFyRXhwaXJlZEludGVyYWN0
aW9uKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIG1v
c3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lID0gMCwgaGFkVXNlckludGVyYWN0aW9uID0gMSBX
SEVSRSBkb21haW5JRCBJTiAoIiwgZXhwaXJlZFJlY29yZElEcywgIikiKSk7CisgICAgaWYgKGNs
ZWFyRXhwaXJlZEludGVyYWN0aW9uLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJl
dHVybjsKKworICAgIFNRTGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJh
c2UsIG1ha2VTdHJpbmcoIkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9t
YWlucyAiLCBleHBpcmVkUmVjb3JkSURzLCAiKSIpKTsKKyAgICBpZiAocmVtb3ZlU3RvcmFnZUFj
Y2Vzcy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
Y2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24uc3RlcCgpICE9IFNRTElURV9ET05FCisgICAgICAgIHx8
IHJlbW92ZVN0b3JhZ2VBY2Nlc3Muc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJF
TEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3Nh
Z2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25l
ZD4mJiBkb21haW5JRHNUb0NsZWFyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgaWYgKGRvbWFpbklEc1RvQ2xlYXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGxpc3RUb0NsZWFyID0gYnVpbGRMaXN0KFdURjo6SXRlcmF0b3JSYW5nZTxW
ZWN0b3I8dW5zaWduZWQ+OjppdGVyYXRvcj4oZG9tYWluSURzVG9DbGVhci5iZWdpbigpLCBkb21h
aW5JRHNUb0NsZWFyLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJHcmFuZGZh
dGhlcmluZ1N0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWRE
b21haW5zIFNFVCBncmFuZGZhdGhlcmVkID0gMCBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRv
Q2xlYXIsICIpIikpOworICAgIGlmIChjbGVhckdyYW5kZmF0aGVyaW5nU3RhdGVtZW50LnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoY2xlYXJH
cmFuZGZhdGhlcmluZ1N0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWdpc3RyYWJs
ZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IGVu
ZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKSA+IFdhbGxUaW1lOjpub3coKTsKKyAgICBib29s
IHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmlu
ZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCk7CisKKyAgICBpZiAoc2hvdWxkQ2xl
YXJHcmFuZGZhdGhlcmluZykKKyAgICAgICAgY2xlYXJFbmRPZkdyYW5kZmF0aGVyaW5nVGltZVN0
YW1wKCk7CisKKyAgICBjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rpb25zKCk7CisgICAgCisgICAg
VmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBwcmV2YWxlbnRSZXNvdXJjZXM7CisKKyAgICBWZWN0
b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcHJldmFsZW50RG9tYWlucyA9IHRoaXMtPnByZXZhbGVu
dERvbWFpbnMoKTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZh
dGhlcmluZzsKKyAgICBmb3IgKGF1dG8mIHN0YXRpc3RpYyA6IHByZXZhbGVudERvbWFpbnMpIHsK
KyAgICAgICAgaWYgKCFzdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uICYmICghc2hvdWxkQ2hl
Y2tGb3JHcmFuZGZhdGhlcmluZyB8fCAhc3RhdGlzdGljLmdyYW5kZmF0aGVyZWQpKQorICAgICAg
ICAgICAgcHJldmFsZW50UmVzb3VyY2VzLmFwcGVuZChzdGF0aXN0aWMucmVnaXN0ZXJhYmxlRG9t
YWluKTsKKworICAgICAgICBpZiAoc2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyAmJiBzdGF0aXN0
aWMuZ3JhbmRmYXRoZXJlZCkKKyAgICAgICAgICAgIGRvbWFpbklEc1RvQ2xlYXJHcmFuZGZhdGhl
cmluZy5hcHBlbmQoc3RhdGlzdGljLmRvbWFpbklEKTsKKyAgICB9CisKKyAgICBjbGVhckdyYW5k
ZmF0aGVyaW5nKFdURk1vdmUoZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nKSk7CisgICAg
CisgICAgcmV0dXJuIHByZXZhbGVudFJlc291cmNlczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdW5zaWduZWQgY291bnQgPSAwOwor
ICAgIGlmIChtX29ic2VydmVkRG9tYWluQ291bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAg
ICAgIGNvdW50ID0gbV9vYnNlcnZlZERvbWFpbkNvdW50LmdldENvbHVtbkludCgwKTsKKworICAg
IGludCByZXNldFJlc3VsdCA9IG1fb2JzZXJ2ZWREb21haW5Db3VudC5yZXNldCgpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisKKyAg
ICBpZiAoY291bnQgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbyA8
PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpOworCisgICAgc2l6ZV90IGNvdW50
TGVmdFRvUHJ1bmUgPSBjb3VudCAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87Cisg
ICAgQVNTRVJUKGNvdW50TGVmdFRvUHJ1bmUpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHJlY29y
ZHNUb1BydW5lKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBkb21haW5JRCBGUk9NIE9i
c2VydmVkRG9tYWlucyBPUkRFUiBCWSBoYWRVc2VySW50ZXJhY3Rpb24sIGlzUHJldmFsZW50LCBs
YXN0U2VlbiBERVNDIExJTUlUICIsIFN0cmluZzo6bnVtYmVyKGNvdW50TGVmdFRvUHJ1bmUpKSk7
CisgICAgaWYgKHJlY29yZHNUb1BydW5lLnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkIGZhaWxlZCwgZXJyb3IgbWVz
c2FnZTogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFZlY3Rvcjx1bnNpZ25lZD4gZW50cmllc1RvUHJ1bmU7CisgICAgd2hpbGUgKHJlY29yZHNUb1By
dW5lLnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICBlbnRyaWVzVG9QcnVuZS5hcHBlbmQo
cmVjb3Jkc1RvUHJ1bmUuZ2V0Q29sdW1uSW50KDApKTsKKworICAgIGF1dG8gbGlzdFRvUHJ1bmUg
PSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNpZ25lZD46Oml0ZXJhdG9y
PihlbnRyaWVzVG9QcnVuZS5iZWdpbigpLCBlbnRyaWVzVG9QcnVuZS5lbmQoKSkpOworCisgICAg
U1FMaXRlU3RhdGVtZW50IHBydW5lQ29tbWFuZChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJERUxF
VEUgZnJvbSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgZG9tYWluSUQgSU4gKCIsIGxpc3RUb1BydW5l
LCAiKSIpKTsKKyAgICBpZiAocHJ1bmVDb21tYW5kLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgfHwgcHJ1bmVDb21tYW5kLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1cGRhdGVMYXN0U2Vlbihjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3VwZGF0ZUxhc3RTZWVuU3Rh
dGVtZW50LmJpbmREb3VibGUoMSwgbGFzdFNlZW4uc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC5iaW5k
VGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3VwZGF0
ZUxhc3RTZWVuU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6dXBkYXRlTGFzdFNlZW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7
cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaW50
IHJlc2V0UmVzdWx0ID0gbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC5yZXNldCgpOworICAgIEFT
U0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldExhc3RTZWVuKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgdXBkYXRlTGFzdFNlZW4oZG9tYWlu
LCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoc2Vjb25kcy5zZWNvbmRzKCkpKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJh
YmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNv
dXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4p
OworICAgIHNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbiwgUmVzb3VyY2VMb2FkUHJldmFsZW5j
ZTo6VmVyeUhpZ2gpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQyMGJjMzJlNTdkNDQ4OGFiM2QzNzU4NzRmNTUwY2VjYjlhNjQwZWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElD
UykKKworI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU1FM
aXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0YXRlbWVudC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFNR
TGl0ZURhdGFiYXNlOworY2xhc3MgU1FMaXRlU3RhdGVtZW50Oworc3RydWN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7CisKKy8vIFRoaXMgaXMgYWx3YXlzIGNvbnN0cnVjdGVk
IC8gdXNlZCAvIGRlc3Ryb3llZCBvbiB0aGUgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
J3Mgc3RhdGlzdGljcyBxdWV1ZS4KK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlIGZpbmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSB7CitwdWJs
aWM6CisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUoV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1ZXVlJiwgY29uc3QgU3RyaW5nJiBzdG9yYWdlRGly
ZWN0b3J5UGF0aCk7CisKKyAgICB2b2lkIHBvcHVsYXRlRnJvbU1lbW9yeVN0b3JlKGNvbnN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSYpOworCisgICAgdm9pZCBjbGVhcihDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgdm9pZCB1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGFzc2lmeVByZXZhbGVu
dFJlc291cmNlcygpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJZk5lZWRlZCgpIG92
ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpIG92ZXJyaWRlOworCisg
ICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3Rv
cmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYmKSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJh
YmxlRG9tYWluPiYpIG92ZXJyaWRlOworCisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVk
RnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
Jikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
c2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiwgYm9vbCB2YWx1ZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0dyYW5kZmF0aGVy
ZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQg
c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29u
c3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1l
RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3Vi
UmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29u
c3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4m
KSBvdmVycmlkZTsKKworICAgIHZvaWQgY2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVE
b21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgcmVx
dWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJh
bWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
U3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2aWdh
dGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZyb21E
b21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpIG92ZXJyaWRlOworICAg
IHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4m
LCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBvdmVycmlkZTsKKworICAgIHZvaWQgY2xlYXJV
c2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICBi
b29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNl
Y29uZHMpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGJvb2wgaW5zZXJ0T2JzZXJ2ZWREb21h
aW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHZvaWQgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgYm9vbCBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5zaWdu
ZWQgZG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbik7Cisg
ICAgYm9vbCByZWxhdGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgdW5z
aWduZWQgZmlyc3REb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNlY29uZERvbWFp
bikgY29uc3Q7CisgICAgdW5zaWduZWQgZG9tYWluSUQoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdDsKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBjb25maXJtRG9tYWluRG9lc05vdEV4
aXN0KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisjZW5kaWYKKyAgICB2b2lkIHVw
ZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgV2FsbFRpbWUpOworICAgIHZv
aWQgc2V0VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgYm9vbCBoYWRV
c2VySW50ZXJhY3Rpb24sIFdhbGxUaW1lKTsKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IGRvbWFpbnNUb0Jsb2NrKCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgUHJldmFsZW50RG9tYWluRGF0
YSB7CisgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEOworICAgICAgICBSZWdpc3RyYWJsZURvbWFp
biByZWdpc3RlcmFibGVEb21haW47CisgICAgICAgIFdhbGxUaW1lIG1vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25UaW1lOworICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbjsKKyAgICAgICAg
Ym9vbCBncmFuZGZhdGhlcmVkOworICAgIH07CisgICAgVmVjdG9yPFByZXZhbGVudERvbWFpbkRh
dGE+IHByZXZhbGVudERvbWFpbnMoKSBjb25zdDsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IGZpbmRF
eHBpcmVkVXNlckludGVyYWN0aW9ucygpIGNvbnN0OworICAgIHZvaWQgY2xlYXJFeHBpcmVkVXNl
ckludGVyYWN0aW9ucygpOworICAgIHZvaWQgY2xlYXJHcmFuZGZhdGhlcmluZyhWZWN0b3I8dW5z
aWduZWQ+JiYpOworICAgIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFBy
b21wdCh1bnNpZ25lZCBkb21haW5JRCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsK
KyAgICB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKEhhc2hTZXQ8
UmVnaXN0cmFibGVEb21haW4+JiYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZWNsYXNzaWZ5UmVz
b3VyY2VzKCk7CisgICAgc3RydWN0IE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMgeworICAgICAg
ICBSZWdpc3RyYWJsZURvbWFpbiByZWdpc3RlcmFibGVEb21haW47CisgICAgICAgIFJlc291cmNl
TG9hZFByZXZhbGVuY2UgcHJldmFsZW5jZTsKKyAgICAgICAgdW5zaWduZWQgc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50OworICAgICAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNDb3VudDsKKyAgICAgICAgdW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0NvdW50OworICAgIH07CisgICAgSGFzaE1hcDx1bnNpZ25lZCwgTm90VmVyeVByZXZhbGVu
dFJlc291cmNlcz4gZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKworICAgIGJvb2wg
cHJlZGljYXRlVmFsdWVGb3JEb21haW4oV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKworICAgIGVudW0gY2xhc3MgQ29va2llVHJlYXRt
ZW50UmVzdWx0IHsgQWxsb3csIEJsb2NrQW5kS2VlcCwgQmxvY2tBbmRQdXJnZSB9OworICAgIENv
b2tpZVRyZWF0bWVudFJlc3VsdCBjb29raWVUcmVhdG1lbnRGb3JPcmlnaW4oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHNldFByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSk7CisgICAg
dW5zaWduZWQgcmVjdXJzaXZlbHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVk
VG9UaGlzRG9tYWluKHVuc2lnbmVkIHByaW1hcnlEb21haW5JRCwgU3RkU2V0PHVuc2lnbmVkPiYg
bm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2
ZUNhbGxzKTsKKyAgICB2b2lkIHNldERvbWFpbnNBc1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+
JiYpOworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoU3ViRnJhbWVEb21haW4m
JiwgVG9wRnJhbWVEb21haW4mJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgYm9vbCB1c2Vy
V2FzUHJvbXB0ZWROb3dPckVhcmxpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
OworICAgIHZvaWQgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVkVG9QcmV2YWxlbnQoKTsK
KyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVudFJlc291cmNlc0Zv
ckRlYnVnTW9kZSgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIHBydW5lU3RhdGlzdGljc0lmTmVlZGVk
KCkgb3ZlcnJpZGU7CisgICAgZW51bSBjbGFzcyBBZGRlZFJlY29yZCB7IE5vLCBZZXMgfTsKKyAg
ICBzdGQ6OnBhaXI8QWRkZWRSZWNvcmQsIHVuc2lnbmVkPiBlbnN1cmVSZXNvdXJjZVN0YXRpc3Rp
Y3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIFZl
Y3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRl
RGF0YUZvcigpIG92ZXJyaWRlOworICAgIGJvb2wgaXNEYXRhYmFzZVN0b3JlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBjcmVhdGVTY2hlbWEoKTsKKyAgICBib29s
IHByZXBhcmVTdGF0ZW1lbnRzKCk7CisgICAgCisgICAgY29uc3QgU3RyaW5nIG1fc3RvcmFnZURp
cmVjdG9yeVBhdGg7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSBtX2RhdGFi
YXNlOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fb2JzZXJ2ZWREb21h
aW5Db3VudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pbnNlcnRUb3BM
ZXZlbERvbWFpblN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnNTdGF0ZW1lbnQ7CisgICAg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUbzsKKyAg
ICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9FeGlzdHM7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tOworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnM7CisgICAgbXV0YWJsZSBXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHM7
CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluczsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1l
bnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIG11dGFibGUgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0V4aXN0czsKKyAg
ICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b207CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHM7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVT
dGF0ZW1lbnQgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxl
IFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7
CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291
cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1faXNW
ZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQ7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVt
ZW50IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBtdXRhYmxlIFdlYkNv
cmU6OlNRTGl0ZVN0YXRlbWVudCBtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudDsKKyAgICBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50Owor
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1faXNHcmFuZGZhdGhlcmVkU3Rh
dGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fZmluZEV4cGly
ZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUpIHsgcmV0dXJuIHN0b3JlLmlzRGF0
YWJhc2VTdG9yZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcApp
bmRleCAxN2NhNTdmOGYxNGRhZmI3OGJhOGJjYWYwYjEyY2E5M2RiODUwM2E4Li41ODYxZGJhN2I3
NGFjOTk5ZTdhN2NkNWUwYzg4MDc5YmUxM2ZlNDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcApAQCAtNDksOTQgKzQ5LDYgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogY29uc3RleHByIHVu
c2lnbmVkIHN0YXRpc3RpY3NNb2RlbFZlcnNpb24geyAxNSB9OwotY29uc3RleHByIHVuc2lnbmVk
IG1heE51bWJlck9mUmVjdXJzaXZlQ2FsbHNJblJlZGlyZWN0VHJhY2VCYWNrIHsgNTAgfTsKLWNv
bnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsIHsgNV9z
IH07Ci1jb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5nRGF0ZXNXaW5kb3cgeyAzMCB9OwotY29u
c3RleHByIHVuc2lnbmVkIG1heEltcG9ydGFuY2UgeyAzIH07Ci0KLSNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKLXN0YXRpYyBTdHJpbmcgZG9tYWluc1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxSZWdp
c3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwot
ICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewotICAgICAgICBpZiAoIWJ1aWxkZXIu
aXNFbXB0eSgpKQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwotICAg
ICAgICBidWlsZGVyLmFwcGVuZChkb21haW4uc3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOwotfQotI2VuZGlmCi0KLWNsYXNzIE9wZXJhdGluZ0RhdGUgewot
cHVibGljOgotICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBzdGF0aWMgT3Bl
cmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUgdGltZSkKLSAgICB7Ci0gICAgICAgIGRv
dWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5taWxsaXNlY29uZHMoKTsKLSAgICAg
ICAgaW50IHllYXIgPSBtc1RvWWVhcihtcyk7Ci0gICAgICAgIGludCB5ZWFyRGF5ID0gZGF5SW5Z
ZWFyKG1zLCB5ZWFyKTsKLSAgICAgICAgaW50IG1vbnRoID0gbW9udGhGcm9tRGF5SW5ZZWFyKHll
YXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotICAgICAgICBpbnQgbW9udGhEYXkgPSBkYXlJbk1v
bnRoRnJvbURheUluWWVhcih5ZWFyRGF5LCBpc0xlYXBZZWFyKHllYXIpKTsKLQotICAgICAgICBy
ZXR1cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OwotICAgIH0KLQot
ICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRlIHRvZGF5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBP
cGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRpbWUoV2FsbFRpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAg
ICBTZWNvbmRzIHNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBTZWNvbmRzIHsgZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERh
eSkgKiBzZWNvbmRzUGVyRGF5IH07Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fbW9u
dGhEYXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYg
bV95ZWFyID09IG90aGVyLm1feWVhcjsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPChjb25z
dCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzZWNv
bmRzU2luY2VFcG9jaCgpIDwgb3RoZXIuc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICB9Ci0KLSAg
ICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2lu
Y2VFcG9jaCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFy
LCBpbnQgbW9udGgsIGludCBtb250aERheSkKLSAgICAgICAgOiBtX3llYXIoeWVhcikKLSAgICAg
ICAgLCBtX21vbnRoKG1vbnRoKQotICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCi0gICAg
eyB9Ci0KLSAgICBpbnQgbV95ZWFyIHsgMCB9OwotICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBb
MCwgMTFdLgotICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgotfTsKLQotc3Rh
dGljIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYg
bmV3RGF0ZXMpCi17Ci0gICAgaWYgKGV4aXN0aW5nRGF0ZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gV1RGTW92ZShuZXdEYXRlcyk7Ci0KLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbWVy
Z2VkRGF0ZXMoZXhpc3RpbmdEYXRlcy5zaXplKCkgKyBuZXdEYXRlcy5zaXplKCkpOwotCi0gICAg
Ly8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBkYXRlcy4KLSAgICBzdGQ6Om1lcmdl
KGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0ZXMuYmVn
aW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJlZ2luKCkpOwotICAgIC8vIFJlbW92
ZSBkdXBsaWNhdGUgZGF0ZXMuCi0gICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJnZWREYXRl
cyk7Ci0KLSAgICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hl
cyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KLSAgICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4g
b3BlcmF0aW5nRGF0ZXNXaW5kb3cpCi0gICAgICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKLQot
ICAgIHJldHVybiBtZXJnZWREYXRlczsKLX0KIAogc3RydWN0IFN0YXRpc3RpY3NMYXN0U2VlbiB7
CiAgICAgUmVnaXN0cmFibGVEb21haW4gZG9tYWluOwpAQCAtMTU1LDM2ICs2NywyNCBAQCBzdGF0
aWMgdm9pZCBwcnVuZVJlc291cmNlcyhIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzPiYgcwogICAgICAgICBzdGF0aXN0aWNzTWFwLnJlbW92ZShzdGF0aXN0
aWNzVG9QcnVuZVtpXS5kb21haW4pOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9y
dGFuY2UoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpCi17
Ci0gICAgdW5zaWduZWQgaW1wb3J0YW5jZSA9IG1heEltcG9ydGFuY2U7Ci0gICAgaWYgKCFyZXNv
dXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlKQotICAgICAgICBpbXBvcnRhbmNlIC09
IDE7Ci0gICAgaWYgKCFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCi0gICAg
ICAgIGltcG9ydGFuY2UgLT0gMjsKLSAgICByZXR1cm4gaW1wb3J0YW5jZTsKLX0KLQogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1ZXVlJiB3
b3JrUXVldWUpCi0gICAgOiBtX3N0b3JlKHN0b3JlKQotICAgICwgbV93b3JrUXVldWUod29ya1F1
ZXVlKQorICAgIDogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUp
CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICByZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7CiAjZW5kaWYKLSAgICBpbmNs
dWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOwogCi0gICAgbV93b3JrUXVldWUt
PmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAg
ICB3b3JrUXVldWUuZGlzcGF0Y2hBZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0
aGlzKV0gewogICAgICAgICBpZiAod2Vha1RoaXMpCiAgICAgICAgICAgICB3ZWFrVGhpcy0+Y2Fs
Y3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCk7CiAgICAgfSk7CiB9CiAKLVJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6flJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgp
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNFbXB0eSgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgcmV0dXJuIG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNldFBlcnNpc3RlbnRTdG9yYWdlKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NQZXJzaXN0ZW50U3RvcmFnZSYgcGVyc2lzdGVudFN0b3JhZ2UpCkBAIC0xOTYsNzkgKzk2LDE2
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkpCisgICAgaWYg
KHBhcmFtZXRlcnMoKS5zaG91bGRTdWJtaXRUZWxlbWV0cnkpCiAgICAgICAgIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqdGhpcyk7CiB9CiAK
LXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0gICAgbV9wYXJhbWV0ZXJzLnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCB2YWx1ZSkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0
VGVsZW1ldHJ5ID0gdmFsdWU7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2spCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jcmVtZW50
UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4m
JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLQotICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgewotICAg
ICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKE5F
VFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIoKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0
b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkKLSAgICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuYWRk
KHBsdWdpbi0+cGx1Z2luUHJvY2Vzc1Rva2VuKCkpOwotI2VuZGlmCi0KLSAgICBhdXRvIHByZXZh
bGVudFJlc291cmNlRG9tYWlucyA9IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURh
dGFGb3IoKTsKLSAgICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgewot
ICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiBkb21h
aW4gOiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgeworICAgICAgICBhdXRvJiBzdGF0
aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21h
aW4pOworICAgICAgICArK3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7CiAgICAgfQotCi0j
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVn
TG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJl
bW92ZSBkYXRhIHJlY29yZHMgZm9yICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZh
bGVudFJlc291cmNlRG9tYWlucykudXRmOCgpLmRhdGEoKSk7Ci0jZW5kaWYKLQotICAgIHNldERh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKHRydWUpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50
UmVzb3VyY2VEb21haW5zKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCF3ZWFrVGhpcykgewotICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHdlYWtUaGlzLT5tX3N0b3Jl
LmRlbGV0ZVdlYnNpdGVEYXRhRm9yUmVnaXN0cmFibGVEb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0
YVN0b3JlcyhXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBl
cygpLCBXVEZNb3ZlKHByZXZhbGVudFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29w
eVJlZigpXShjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1dpdGhEZWxl
dGVkV2Vic2l0ZURhdGEpIG11dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRj
aChbZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlu
c1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3
ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRlRGF0YSkgewot
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSB3ZWFrVGhpcy0+ZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKLSAgICAgICAgICAg
ICAgICAgICAgKytzdGF0aXN0aWMuZGF0YVJlY29yZHNSZW1vdmVkOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQo
ZmFsc2UpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7Ci0jaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECi0gICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9k
ZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHJl
bW92aW5nIGRhdGEgcmVjb3Jkcy4iKTsKLSNlbmRpZgotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwogfQogCiB1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnJlY3Vyc2l2ZWx5R2V0QWxsRG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvVGhpc0Rv
bWFpbihjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRUbywgdW5z
aWduZWQgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscykgY29uc3QKQEAgLTMyOSw1MyArMTY2LDQwIEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptYXJrQXNQcmV2YWxlbnRJ
Zkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVuCiAKIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjppc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3MmIHJlc291cmNlU3RhdGlzdGljKQogewotICAgIGlmICghbV9kZWJ1Z01vZGVFbmFibGVkKQor
ICAgIGlmICghZGVidWdNb2RlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gcmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gbV9kZWJ1Z1N0
YXRpY1ByZXZhbGVudFJlc291cmNlIHx8IHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9t
YWluID09IG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsKKyAgICByZXR1cm4gcmVzb3Vy
Y2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNv
dXJjZSgpIHx8IHJlc291cmNlU3RhdGlzdGljLnJlZ2lzdHJhYmxlRG9tYWluID09IGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2Vz
KCkKIHsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmIChtX3BhcmFt
ZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwpIHsK
LSAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0aXN0
aWNzTWFwLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoaXNQcmV2YWxlbnREdWVUb0RlYnVn
TW9kZShyZXNvdXJjZVN0YXRpc3RpYykpCi0gICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVz
b3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwot
ICAgICAgICAgICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJl
c291cmNlKSB7Ci0gICAgICAgICAgICAgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRpcmVjdGVk
VG9QcmV2YWxlbnQocmVzb3VyY2VTdGF0aXN0aWMpOwotICAgICAgICAgICAgICAgIGF1dG8gY3Vy
cmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID8g
UmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6Okxv
dzsKLSAgICAgICAgICAgICAgICBhdXRvIG5ld1ByZXZhbGVuY2UgPSBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyLmNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShyZXNvdXJjZVN0
YXRpc3RpYywgY3VycmVudFByZXZhbGVuY2UpOwotICAgICAgICAgICAgICAgIGlmIChuZXdQcmV2
YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQotICAgICAgICAgICAgICAgICAgICBzZXRQcmV2
YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7Ci0gICAgICAg
ICAgICB9CisgICAgZm9yIChhdXRvJiByZXNvdXJjZVN0YXRpc3RpYyA6IG1fcmVzb3VyY2VTdGF0
aXN0aWNzTWFwLnZhbHVlcygpKSB7CisgICAgICAgIGlmIChpc1ByZXZhbGVudER1ZVRvRGVidWdN
b2RlKHJlc291cmNlU3RhdGlzdGljKSkKKyAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNl
KHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKKyAgICAg
ICAgZWxzZSBpZiAoIXJlc291cmNlU3RhdGlzdGljLmlzVmVyeVByZXZhbGVudFJlc291cmNlKSB7
CisgICAgICAgICAgICBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChy
ZXNvdXJjZVN0YXRpc3RpYyk7CisgICAgICAgICAgICBhdXRvIGN1cnJlbnRQcmV2YWxlbmNlID0g
cmVzb3VyY2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSA/IFJlc291cmNlTG9hZFByZXZh
bGVuY2U6OkhpZ2ggOiBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpMb3c7CisgICAgICAgICAgICBh
dXRvIG5ld1ByZXZhbGVuY2UgPSBjbGFzc2lmaWVyKCkuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxl
bmNlKHJlc291cmNlU3RhdGlzdGljLCBjdXJyZW50UHJldmFsZW5jZSk7CisgICAgICAgICAgICBp
ZiAobmV3UHJldmFsZW5jZSAhPSBjdXJyZW50UHJldmFsZW5jZSkKKyAgICAgICAgICAgICAgICBz
ZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgbmV3UHJldmFsZW5jZSk7CiAg
ICAgICAgIH0KICAgICB9Cit9CiAKLSAgICByZW1vdmVEYXRhUmVjb3JkcyhbdGhpcywgd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyldKCkgbXV0YWJsZSB7Ci0gICAgICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7Ci0gICAgICAgIGlmICht
X3BlcnNpc3RlbnRTdG9yYWdlKQotICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+c2No
ZWR1bGVPcldyaXRlTWVtb3J5U3RvcmUoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRT
dG9yYWdlOjpGb3JjZUltbWVkaWF0ZVdyaXRlOjpObyk7Ci0KLSAgICAgICAgaWYgKCFtX3BhcmFt
ZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMs
IHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldKCkgewotICAgICAgICAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5
bmNTdG9yYWdlSWZOZWVkZWQoKQoreworICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAg
ICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6
Ok5vKTsKK30KIAotICAgICAgICAgICAgbV9zdG9yZS5ub3RpZnlSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzUHJvY2Vzc2VkKCk7Ci0gICAgICAgIH0pOwotICAgIH0pOwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnN5bmNTdG9yYWdlSW1tZWRpYXRlbHkoKQoreworICAgIGlm
IChtX3BlcnNpc3RlbnRTdG9yYWdlKQorICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hl
ZHVsZU9yV3JpdGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0
b3JhZ2U6OkZvcmNlSW1tZWRpYXRlV3JpdGU6Olllcyk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1l
RG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3Vi
RnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJh
bWVEb21haW4sIE9wdGlvbmFsPEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTM5MCw3ICsyMTQsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdp
c3RyYWJsZURvbWFpbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHN1YkZyYW1lRG9tYWluID0g
c3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVE
b21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICBSdW5Mb29wOjpt
YWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgc3ViRnJhbWVEb21haW4g
PSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICBzdG9y
ZS0+Y2FsbEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVEb21haW4sIHRv
cEZyYW1lRG9tYWluLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgW3N0b3JlID0gc3RvcmUuY29w
eVJlZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShi
b29sIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVl
KCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHJlc3VsdF0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIocmVzdWx0KTsKQEAgLTM5OSwxNCArMjIzLDE0IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
CiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpy
ZXF1ZXN0U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBS
ZWdpc3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
dG9yYWdlQWNjZXNzU3RhdHVzKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURv
bWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBG
cmFtZUlEIGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgYXV0byYgc3Vi
RnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURv
bWFpbihzdWJGcmFtZURvbWFpbik7CiAgICAgaWYgKHNob3VsZEJsb2NrQW5kUHVyZ2VDb29raWVz
KHN1YkZyYW1lU3RhdGlzdGljKSkgewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAg
ICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RlYnVnLCAiQ2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGlj
fXMgc2luY2UgaXRzIGNvb2tpZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMg
YW5kIGl0IGhhcyBub3QgcmVjZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4i
LCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFT
RV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkNhbm5vdCBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNl
IGl0cyBjb29raWVzIGFyZSBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGFuZCBpdCBo
YXMgbm90IHJlY2VpdmVkIHVzZXIgaW50ZXJhY3Rpb24gYXMgZmlyc3QtcGFydHkuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTQxNCw3ICsyMzgsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4m
JgogCiAgICAgaWYgKCFzaG91bGRCbG9ja0FuZEtlZXBDb29raWVzKHN1YkZyYW1lU3RhdGlzdGlj
KSkgewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
Tm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBj
b29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFt
ZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
Ik5vIG5lZWQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMg
Y29va2llcyBhcmUgbm90IGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDIzLDEzICsyNDcsMTMgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYKICAgICBh
dXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBwcm9tcHRFbmFibGVkICYmIGhhc1VzZXJHcmFu
dGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0aXN0aWMsIHRvcEZyYW1l
RG9tYWluKTsKICAgICBpZiAocHJvbXB0RW5hYmxlZCAmJiAhdXNlcldhc1Byb21wdGVkRWFybGll
cikgewogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKG1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
QWJvdXQgdG8gYXNrIHRoZSB1c2VyIHdoZXRoZXIgdGhleSB3YW50IHRvIGdyYW50IHN0b3JhZ2Ug
YWNjZXNzIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cyBvciBub3QuIiwgc3ViRnJhbWVE
b21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5h
YmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBhc2sgdGhlIHVz
ZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9
cyB1bmRlciAle3B1YmxpY31zIG9yIG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRp
ZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpSZXF1aXJl
c1VzZXJQcm9tcHQpOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIGlmICh1c2VyV2FzUHJv
bXB0ZWRFYXJsaWVyKSB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVB
U0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVy
ICV7cHVibGljfXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9w
RnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVi
bGljfXMuIiwgc3ViRnJhbWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVE
b21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICB9CiAKQEAgLTQ0MCw3
ICsyNjQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVz
dFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJgogICAgIH0pOwogfQogCi12b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRl
ck9wZW5lcihSZWdpc3RyYWJsZURvbWFpbiYmIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcywg
dWludDY0X3Qgb3BlbmVyUGFnZUlELCBSZWdpc3RyYWJsZURvbWFpbiYmIG9wZW5lckRvbWFpbikK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmIGRvbWFpbkluTmVl
ZE9mU3RvcmFnZUFjY2VzcywgT3BlbmVyUGFnZUlEIG9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWlu
JiYgb3BlbmVyRG9tYWluKQogewogICAgIEFTU0VSVChkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nl
c3MgIT0gb3BlbmVyRG9tYWluKTsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAg
LTQ1NiwxMiArMjgwLDEyIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFJlZ2lzdHJhCiAgICAgICAgIHJldHVy
bjsKIAogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIFJFTEVBU0VfTE9HX0lORk9fSUYo
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVt
cG9yYXJ5IGNvbWJhdGliaWxpdHkgZml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3Ig
JXtwdWJsaWN9cyB1bmRlciBvcGVuZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBp
bnRlcmFjdGlvbiBpbiB0aGUgb3BlbmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VB
Y2Nlc3Muc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgp
LCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJbVGVtcG9yYXJ5IGNvbWJhdGliaWxpdHkg
Zml4XSBTdG9yYWdlIGFjY2VzcyB3YXMgZ3JhbnRlZCBmb3IgJXtwdWJsaWN9cyB1bmRlciBvcGVu
ZXIgcGFnZSBmcm9tICV7cHVibGljfXMsIHdpdGggdXNlciBpbnRlcmFjdGlvbiBpbiB0aGUgb3Bl
bmVkIHdpbmRvdy4iLCBkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Muc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgb3BlbmVyRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAg
ICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MpLCBXVEZNb3ZlKG9wZW5lckRvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVyUGFn
ZUlELCBmYWxzZSwgW10oYm9vbCkgeyB9KTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmIHN1
YkZyYW1lRG9tYWluLCBSZWdpc3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCB1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFt
ZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWlu
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVk
Tm93LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00NzMsNyArMjk3LDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vz
cyhSZWdpc3RyYWJsZURvbWFpbiYmIHMKICAgICBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChX
VEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQs
IHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkTm93LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3Jh
Z2VBY2Nlc3NJbnRlcm5hbChSZWdpc3RyYWJsZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBSZWdp
c3RyYWJsZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBPcHRpb25hbDx1aW50NjRfdD4gZnJhbWVJ
RCwgdWludDY0X3QgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFt
ZURvbWFpbiYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWlu
LCBPcHRpb25hbDxGcmFtZUlEPiBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBib29sIHVzZXJXYXNQ
cm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxs
YmFjaykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNDgzLDE0ICsz
MDcsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3Rv
cmFnZUFjY2Vzc0ludGVybmFsKFJlZ2lzdHJhYmxlRG8KICAgICB9CiAKICAgICAvLyBGSVhNRTog
UmVtb3ZlIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIGNoZWNrIGlmIHByb21wdGluZyBp
cyBubyBsb25nZXIgZXhwZXJpbWVudGFsLgotICAgIGlmICh1c2VyV2FzUHJvbXB0ZWROb3dPckVh
cmxpZXIgJiYgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQpIHsKKyAgICBpZiAodXNlcldh
c1Byb21wdGVkTm93T3JFYXJsaWVyICYmIHN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCgpKSB7
CiAgICAgICAgIGF1dG8mIHN1YkZyYW1lU3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOwogICAgICAgICBBU1NFUlQo
c3ViRnJhbWVTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKTsKICAgICAgICAgQVNTRVJUKHN1
YkZyYW1lU3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucy5jb250YWlu
cyh0b3BGcmFtZURvbWFpbikpOwogICAgICAgICBzdWJGcmFtZVN0YXRpc3RpYy5tb3N0UmVjZW50
VXNlckludGVyYWN0aW9uVGltZSA9IFdhbGxUaW1lOjpub3coKTsKICAgICB9CiAKLSAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3N1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5
KCksIGZyYW1lSUQsIHBhZ2VJRCwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9w
RnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFn
ZUlELCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldKCkgbXV0YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxsR3JhbnRTdG9yYWdlQWNjZXNzSGFu
ZGxlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHN0b3JlID0gc3RvcmUuY29weVJlZigpXShib29s
IHZhbHVlKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5k
aXNwYXRjaChbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgdmFsdWVdICgpIG11dGFibGUg
ewogICAgICAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlKTsKQEAgLTQ5OSwxMDUgKzMyMywzOCBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNj
ZXNzSW50ZXJuYWwoUmVnaXN0cmFibGVEbwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hT
ZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1h
a2VXZWFrUHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90
aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGRO
b3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtR
dWV1ZS5jb3B5UmVmKCksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7Ci0g
ICAgICAgIHN0b3JlLT5yZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFr
VGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1
ZS5jb3B5UmVmKCldIChIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRoV2Vi
c2l0ZURhdGEpIG11dGFibGUgewotICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vh
a1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSA9IGNyb3Nz
VGhyZWFkQ29weShkb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgewot
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkb21h
aW4gOiBkb21haW5zV2l0aFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8m
IHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3Ry
YWJsZURvbWFpbihkb21haW4pOwotICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWMuZ3JhbmRm
YXRoZXJlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdlYWtU
aGlzLT5tX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxsVGltZTo6bm93KCkgKyB3
ZWFrVGhpcy0+bV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsKLSAgICAgICAgICAgICAg
ICBpZiAod2Vha1RoaXMtPm1fcGVyc2lzdGVudFN0b3JhZ2UpCi0gICAgICAgICAgICAgICAgICAg
IHdlYWtUaGlzLT5tX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3JpdGVNZW1vcnlTdG9y
ZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZvcmNlSW1tZWRpYXRl
V3JpdGU6Olllcyk7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICB3ZWFrVGhpcy0+bG9nVGVzdGluZ0V2ZW50KCJHcmFuZGZhdGhlcmVkIl9zKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRv
bWFpbnMpIHsKKyAgICAgICAgYXV0byYgc3RhdGlzdGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWluKTsKKyAgICAgICAgc3RhdGlzdGljLmdyYW5k
ZmF0aGVyZWQgPSB0cnVlOworICAgIH0KIH0KIAogVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmVuc3VyZVByZXZhbGVudFJlc291cmNl
c0ZvckRlYnVnTW9kZSgpCiB7Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCisgICAgaWYg
KCFkZWJ1Z01vZGVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8
UmVnaXN0cmFibGVEb21haW4+IGRvbWFpbnNUb0Jsb2NrOwogICAgIGRvbWFpbnNUb0Jsb2NrLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CiAKLSAgICBhdXRvJiBzdGF0aWNTZXNvdXJjZVN0YXRp
c3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVi
dWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgYXV0byYgc3RhdGljU2Vzb3VyY2VTdGF0
aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1
Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOwogICAgIHNldFByZXZhbGVudFJlc291cmNlKHN0
YXRpY1Nlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoKTsKLSAg
ICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlKTsKKyAgICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdTdGF0aWNQ
cmV2YWxlbnRSZXNvdXJjZSgpKTsKIAotICAgIGlmICghbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlLmlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiBtYW51YWxSZXNvdXJjZVN0YXRpc3Rp
YyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKG1fZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7CisgICAgaWYgKCFkZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlz
dGljID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpKTsKICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2Uo
bWFudWFsUmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwot
ICAgICAgICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQobV9kZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKyAgICAgICAgZG9tYWluc1RvQmxvY2sudW5jaGVja2VkQXBwZW5kKGRl
YnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKSk7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
RGlkIHNldCAle3B1YmxpY31zIGFzIHByZXZhbGVudCByZXNvdXJjZSBmb3IgdGhlIHB1cnBvc2Vz
IG9mIElUUCBEZWJ1ZyBNb2RlLiIsIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291
cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZGVidWdNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgfQog
ICAgIAogICAgIHJldHVybiBkb21haW5zVG9CbG9jazsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUo
Ym9vbCBlbmFibGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBSRUxFQVNFX0xP
R19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlR1cm5lZCBJVFAgRGVidWcgTW9k
ZSBvbi4iKTsKLSNlbmRpZgotCi0gICAgbV9kZWJ1Z01vZGVFbmFibGVkID0gZW5hYmxlOwotICAg
IG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKLQotICAgIGVuc3VyZVByZXZhbGVudFJl
c291cmNlc0ZvckRlYnVnTW9kZSgpOwotICAgIC8vIFRoaXMgd2lsbCBsb2cgdGhlIGN1cnJlbnQg
Y29va2llIGJsb2NraW5nIHN0YXRlLgotICAgIGlmIChlbmFibGUpCi0gICAgICAgIHVwZGF0ZUNv
b2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiBkb21haW4pCi17Ci0gICAgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlID0gZG9tYWluOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpCi17Ci0g
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKyttX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyOwotICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFmdGVyKG1pbmlt
dW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cigqdGhpcyksIHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSAqbV9w
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcl0gewotICAgICAgICBp
ZiAoIXdlYWtUaGlzKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghbV9wZW5k
aW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB8fCAqbV9wZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciAhPSBzdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHJlcXVlc3QgaGFzIGJl
ZW4gY2FuY2VsZWQuCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB1
cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Ci0gICAgICAgIHByb2Nlc3NTdGF0aXN0aWNz
QW5kRGF0YVJlY29yZHMoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3Qo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wZW5kaW5nU3Rh
dGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9IFdURjo6bnVsbG9wdDsKLX0KLQog
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VE
b21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkKIHsKICAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKQEAgLTYzNSw3ICszOTIsNyBAQCB2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYQogICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVj
ZXNzYXJ5KCk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjps
b2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFp
biwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0
U2VlbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNv
dXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHRhcmdldERvbWFpbiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBXYWxsVGltZSBsYXN0U2VlbikKIHsKICAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNjQ1LDcgKzQwMiw3IEBAIHZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmco
Y29uc3QgUmVnaXN0cmFibGVECiAgICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdS
ZXF1ZXN0SWZOZWNlc3NhcnkoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IHNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRhcmdldERvbWFpbikKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJlZGly
ZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiBzb3VyY2VEb21haW4sIGNvbnN0IFJlZGly
ZWN0ZWRUb0RvbWFpbiYgdGFyZ2V0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwogCkBAIC02NTgsNyArNDE1LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVnaXN0cmFibGUKICAg
ICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSgpOwog
fQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVXNlckludGVy
YWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1l
RG9tYWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAg
LTcyOCw3ICs0ODUsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibAogICAgIHJldHVybiBtYXBF
bnRyeSA9PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnkt
PnZhbHVlLmlzUHJldmFsZW50UmVzb3VyY2UgJiYgbWFwRW50cnktPnZhbHVlLmlzVmVyeVByZXZh
bGVudFJlc291cmNlOwogfQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9t
YWluKSBjb25zdAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3VicmVz
b3VyY2VEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzM2LDcgKzQ5Myw3IEBA
IGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1
YnJlc291cmNlVW5kZXIoY29uc3QgUmVnCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWlucy5jb250YWlucyh0b3BGcmFtZURvbWFpbik7CiB9CiAKLWJv
b2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0Citib29sIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0
IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRv
cEZyYW1lRG9tYWluKSBjb25zdAogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CkBAIC03NDQsNyArNTAxLDcgQEAgYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBSZWdpc3QKICAgICByZXR1cm4g
bWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVu
dHJ5LT52YWx1ZS5zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1l
RG9tYWluKTsKIH0KIAotYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omlz
UmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJl
Y3RlZEZyb21Eb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdGVkVG9Eb21h
aW4pIGNvbnN0Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdp
c3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiByZWRpcmVj
dGVkRnJvbURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJiByZWRpcmVjdGVkVG9Eb21h
aW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc3Nyw3
ICs1MzQsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJgogICAgIHJldHVybiBtYXBFbnRyeSA9
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVl
LmdyYW5kZmF0aGVyZWQ7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiBzdWJGcmFtZURvbWFpbiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKQogewogICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwogCkBAIC03ODcsNyArNTQ0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25z
dCBSZWcKICAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0
b3BGcmFtZURvbWFpbik7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnaXN0cmFibGVE
b21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJh
bWVEb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJy
ZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKQog
ewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03OTcsNyArNTU0LDcgQEAg
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdAogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJl
Z2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYgc3VicmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VE
b21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3RE
b21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgwNyw3ICs1
NjQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZwogICAgIGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21h
aW4mIHJlZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwog
CkBAIC04MTcsNyArNTc0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFIKICAgICBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9
CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJl
ZGlyZWN0RG9tYWluKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04
MjcsNyArNTg0LDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBSZWdpc3QKICAgICBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihyZWRpcmVjdERvbWFpbik7CiB9CiAKLXZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0RnJvbShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBU
b3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRp
cmVjdERvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODM3
LDk1ICs1OTQsNiBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0
VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaQogICAgIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMudGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1Jl
bW92YWwoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3BhcmFtZXRlcnMubWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNv
bmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNT
RVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1Rp
bWUgPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXAoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0KLSAgICBtX3Bh
cmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lID0gc2Vjb25kczsKLSAgICB1cGRhdGVDYWNoZU1h
eEFnZUNhcCgpOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIAotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1f
c3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZV0gKCkgewot
ICAgICAgICBzdG9yZS0+c2V0Q2FjaGVNYXhBZ2VDYXAoc2Vjb25kcywgW10geyB9KTsKLSAgICB9
KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEFnZUNh
cEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMgc2Vjb25kcykKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOwotICAgIAotICAg
IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgPSBzZWNvbmRzOwotICAg
IHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDbGllbnRTaWRlQ29va2llc0FnZUNhcCgpCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTKQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBt
YWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0ZXJzLmNsaWVudFNpZGVDb29raWVz
QWdlQ2FwVGltZV0gKCkgewotICAgICAgICBpZiAoYXV0byogbmV0d29ya1Nlc3Npb24gPSBzdG9y
ZS0+bmV0d29ya1Nlc3Npb24oKSkKLSAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uLT5uZXR3b3Jr
U3RvcmFnZVNlc3Npb24oKS5zZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhzZWNvbmRzKTsK
LSAgICB9KTsKLSNlbmRpZgotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdAotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQot
ICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmds
ZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghbV9hY3RpdmVQbHVnaW5U
b2tlbnMuY29udGFpbnMocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4oKSkpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiAhbV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQgfHwgTW9ub3RvbmljVGltZTo6bm93KCkgPj0gKG1fbGFzdFRp
bWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsgbV9wYXJhbWV0ZXJzLm1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCk7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sIHZhbHVlKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9kYXRhUmVjb3Jkc0JlaW5nUmVt
b3ZlZCA9IHZhbHVlOwotICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKQotICAgICAg
ICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IE1vbm90b25pY1RpbWU6Om5vdygp
OwotfQotCiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CkBAIC05NDEsMTMgKzYwOSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8S2V5ZWRFbmNv
ZGVyPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNyZWF0ZUVuY29kZXJGcgog
CiAgICAgYXV0byBlbmNvZGVyID0gS2V5ZWRFbmNvZGVyOjplbmNvZGVyKCk7CiAgICAgZW5jb2Rl
ci0+ZW5jb2RlVUludDMyKCJ2ZXJzaW9uIiwgc3RhdGlzdGljc01vZGVsVmVyc2lvbik7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wIiwgbV9l
bmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7
CisgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1w
IiwgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpLnNlY29uZHNTaW5jZUVwb2NoKCkudmFs
dWUoKSk7CiAKICAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJicm93c2luZ1N0YXRpc3RpY3Mi
LCBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5iZWdpbigpLCBtX3Jlc291cmNlU3RhdGlzdGljc01h
cC5lbmQoKSwgW10oS2V5ZWRFbmNvZGVyJiBlbmNvZGVySW5uZXIsIGNvbnN0IGF1dG8mIGRvbWFp
bikgewogICAgICAgICBkb21haW4udmFsdWUuZW5jb2RlKGVuY29kZXJJbm5lcik7CiAgICAgfSk7
CiAKLSAgICBlbmNvZGVyLT5lbmNvZGVPYmplY3RzKCJvcGVyYXRpbmdEYXRlcyIsIG1fb3BlcmF0
aW5nRGF0ZXMuYmVnaW4oKSwgbV9vcGVyYXRpbmdEYXRlcy5lbmQoKSwgW10oS2V5ZWRFbmNvZGVy
JiBlbmNvZGVySW5uZXIsIE9wZXJhdGluZ0RhdGUgZGF0ZSkgeworICAgIGF1dG8mIG9wZXJhdGlu
Z0RhdGVzID0gdGhpcy0+b3BlcmF0aW5nRGF0ZXMoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGVPYmpl
Y3RzKCJvcGVyYXRpbmdEYXRlcyIsIG9wZXJhdGluZ0RhdGVzLmJlZ2luKCksIG9wZXJhdGluZ0Rh
dGVzLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJbm5lciwgT3BlcmF0aW5nRGF0ZSBk
YXRlKSB7CiAgICAgICAgIGVuY29kZXJJbm5lci5lbmNvZGVEb3VibGUoImRhdGUiLCBkYXRlLnNl
Y29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSk7CiAgICAgfSk7CiAKQEAgLTk2OSw5ICs2MzgsOSBA
QCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bWVyZ2VXaXRoRGF0YUZy
b21EZWNvZGVyKEtleWVkRGVjb2RlciYgZAogCiAgICAgZG91YmxlIGVuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXA7CiAgICAgaWYgKGRlY29kZXIuZGVjb2RlRG91YmxlKCJlbmRPZkdyYW5kZmF0
aGVyaW5nVGltZXN0YW1wIiwgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCkpCi0gICAgICAg
IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25k
cyhlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKTsKKyAgICAgICAgc2V0RW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcChXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHMoZW5kT2ZHcmFuZGZhdGhl
cmluZ1RpbWVzdGFtcCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wID0geyB9OworICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3Rh
bXAoKTsKIAogICAgIFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiBsb2FkZWRTdGF0aXN0
aWNzOwogICAgIGJvb2wgc3VjY2VlZGVkID0gZGVjb2Rlci5kZWNvZGVPYmplY3RzKCJicm93c2lu
Z1N0YXRpc3RpY3MiLCBsb2FkZWRTdGF0aXN0aWNzLCBbdmVyc2lvbk9uRGlza10oS2V5ZWREZWNv
ZGVyJiBkZWNvZGVySW5uZXIsIFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHN0YXRpc3RpY3MpIHsK
QEAgLTk5Nyw3ICs2NjYsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6bWVyZ2VXaXRoRGF0YUZyb21EZWNvZGVyKEtleWVkRGVjb2RlciYgZAogICAgIGlmICghc3Vj
Y2VlZGVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX29wZXJhdGluZ0RhdGVzID0gbWVyZ2VP
cGVyYXRpbmdEYXRlcyhtX29wZXJhdGluZ0RhdGVzLCBXVEZNb3ZlKG9wZXJhdGluZ0RhdGVzKSk7
CisgICAgbWVyZ2VPcGVyYXRpbmdEYXRlcyhXVEZNb3ZlKG9wZXJhdGluZ0RhdGVzKSk7CiB9CiAK
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGVhcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMDA1LDcgKzY3NCw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGVhcihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxlCiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5jbGVhcigpOwotICAgIG1fb3BlcmF0aW5n
RGF0ZXMuY2xlYXIoKTsKKyAgICBjbGVhck9wZXJhdGluZ0RhdGVzKCk7CiAKICAgICBhdXRvIGNh
bGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKIApAQCAtMTA1NiwzOSArNzI1LDYgQEAgYm9vbCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91
Z2hQcm9tcHQKICAgICByZXR1cm4gc3RhdGlzdGljLnN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1l
RG9tYWlucy5jb250YWlucyhmaXJzdFBhcnR5RG9tYWluKTsKIH0KIAotc3RhdGljIHZvaWQgZGVi
dWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwgY29uc3QgVmVjdG9yPFJl
Z2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucykKLXsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
LSAgICBzdGF0aWMgY29uc3QgYXV0byBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVu
dCA9IDUwOwotICAgIGlmIChkb21haW5zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVt
ZW50KSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRz
IGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IGJhdGNoOwotICAgIGJhdGNoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpOwotICAgIGF1dG8gYmF0Y2hOdW1i
ZXIgPSAxOwotICAgIHVuc2lnbmVkIG51bWJlck9mQmF0Y2hlcyA9IHN0ZDo6Y2VpbChkb21haW5z
LnNpemUoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0
YXRlbWVudCkpOwotCi0gICAgZm9yIChhdXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAg
IGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQp
IHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRz
IGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJl
ciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgYmF0Y2guc2hyaW5rKDApOwotICAgICAgICAgICAgKytiYXRjaE51bWJl
cjsKLSAgICAgICAgfQotICAgICAgICBiYXRjaC5hcHBlbmQoZG9tYWluKTsKLSAgICB9Ci0gICAg
aWYgKCFiYXRjaC5pc0VtcHR5KCkpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGluIHRoaXJk
LXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMuIiwgYWN0
aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmcoYmF0Y2gp
LnV0ZjgoKS5kYXRhKCkpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWN0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oZG9tYWlucyk7Ci0jZW5kaWYKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKQEAgLTExMDQsNTIgKzc0MCwyMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fZGVidWdMb2dnaW5nRW5hYmxlZCAm
JiAhZG9tYWluc1RvQmxvY2suaXNFbXB0eSgpKQorICAgIGlmIChkZWJ1Z0xvZ2dpbmdFbmFibGVk
KCkgJiYgIWRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkKICAgICAgICAgZGVidWdMb2dEb21haW5z
SW5CYXRjaGVzKCJibG9jayIsIGRvbWFpbnNUb0Jsb2NrKTsKIAotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIHN0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxv
Y2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBt
dXRhYmxlIHsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCBzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIGRvbWFpbnNUb0Jsb2NrID0g
Y3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxs
VXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihkb21haW5zVG9C
bG9jaywgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIHN0b3JlID0gc3RvcmUuY29weVJl
ZigpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFt3
ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKCk7CiAgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiRG9uZSB1cGRhdGluZyBjb29raWUgYmxvY2tp
bmcuIik7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+ZGVi
dWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVw
ZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsKICNlbmRpZgogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0pOwogICAgIH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4mIGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0K
LSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwg
ZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKLSAg
ICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JI
YW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsK
LSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKGRvbWFpbnMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJl
ZihtX3N0b3JlKSwgZG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zKV0gewotICAgICAg
ICBzdG9yZS0+Y2FsbFJlbW92ZURvbWFpbnNIYW5kbGVyKGRvbWFpbnMpOwotICAgIH0pOwotCi0g
ICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYgcHJvY2Vzc0Z1bmN0aW9uKSBjb25zdAogewogICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTE3OCwxMSArNzg1LDExIEBAIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpy
ZWdpc3RyYWJsZURvbWFpbnNUCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
LSAgICBib29sIHNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgPSBtX2VuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXAgPiBXYWxsVGltZTo6bm93KCk7Ci0gICAgYm9vbCBzaG91bGRDbGVhckdy
YW5kZmF0aGVyaW5nID0gIXNob3VsZENoZWNrRm9yR3JhbmRmYXRoZXJpbmcgJiYgbV9lbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wOworICAgIGJvb2wgc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhl
cmluZyA9IGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKSA+IFdhbGxUaW1lOjpub3coKTsK
KyAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJpbmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFu
ZGZhdGhlcmluZyAmJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCk7CiAKICAgICBpZiAo
c2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZykKLSAgICAgICAgbV9lbmRPZkdyYW5kZmF0aGVyaW5n
VGltZXN0YW1wID0geyB9OworICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3Rh
bXAoKTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcHJldmFsZW50UmVzb3VyY2Vz
OwogICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFs
dWVzKCkpIHsKQEAgLTExOTYsNjIgKzgwMywxNiBAQCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0cmFibGVEb21haW5zVAog
ICAgIHJldHVybiBwcmV2YWxlbnRSZXNvdXJjZXM7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2Fy
eSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBhdXRvIHRvZGF5
ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKLSAgICBpZiAoIW1fb3BlcmF0aW5nRGF0ZXMuaXNF
bXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0
ZXNXaW5kb3cpCi0gICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOwotCi0gICAgbV9v
cGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOwotfQotCi1ib29sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpIHsKLSAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxs
VGltZShyZXNvdXJjZVN0YXRpc3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSkgPCBt
X29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBtZWV0IHRoZSByZWFsIGNyaXRlcmlhIGZvciBhbiBleHBp
cmVkIHN0YXRpc3RpYywgY2hlY2sgdGhlIHVzZXIgc2V0dGluZyBmb3IgYSB0aWdodGVyIHJlc3Ry
aWN0aW9uIChtYWlubHkgZm9yIHRlc3RpbmcpLgotICAgIGlmIChtX3BhcmFtZXRlcnMudGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbikgewotICAgICAgICBpZiAoV2FsbFRpbWU6Om5vdygpID4gcmVz
b3VyY2VTdGF0aXN0aWMubW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgKyBtX3BhcmFtZXRl
cnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbi52YWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1h
eGltdW1FbnRyeUNvdW50KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0g
ICAgbV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRQcnVuZUVu
dHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291bnQpCi17Ci0gICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvID0g
cHJ1bmVUYXJnZXRDb3VudDsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKIAotICAgIGlmIChtX3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgPD0g
bV9wYXJhbWV0ZXJzLm1heFN0YXRpc3RpY3NFbnRyaWVzKQorICAgIGlmIChtX3Jlc291cmNlU3Rh
dGlzdGljc01hcC5zaXplKCkgPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVzKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rv
d25UbyA8PSBtX3BhcmFtZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMpOworICAgIEFTU0VSVChw
YXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvIDw9IHBhcmFtZXRlcnMoKS5tYXhTdGF0aXN0
aWNzRW50cmllcyk7CiAKLSAgICBzaXplX3QgbnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUgPSBt
X3Jlc291cmNlU3RhdGlzdGljc01hcC5zaXplKCkgLSBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVz
RG93blRvOworICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLnNpemUoKSAtIHBhcmFtZXRlcnMoKS5wcnVuZUVudHJpZXNEb3duVG87
CiAgICAgQVNTRVJUKG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lKTsKIAogICAgIFZlY3RvcjxT
dGF0aXN0aWNzTGFzdFNlZW4+IHJlc291cmNlc1RvUHJ1bmVQZXJJbXBvcnRhbmNlW21heEltcG9y
dGFuY2UgKyAxXTsKQEAgLTEyNjQsMjIgKzgyNSw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCiAgICAgQVNTRVJUKCFu
dW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgbV9wYXJhbWV0ZXJzID0geyB9Owot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nVGVzdGluZ0V2
ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0
b3JlKSwgZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBzdG9yZS0+bG9n
VGVzdGluZ0V2ZW50KGV2ZW50KTsKLSAgICB9KTsKLX0KLQogdm9pZCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OnNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBk
b21haW4sIFNlY29uZHMgc2Vjb25kcykKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKQEAgLTEzMDQsMjcgKzg0OSw2IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFiCiAgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVu
Y2U6OlZlcnlIaWdoKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBzdG9yZS0+cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5
UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2go
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICB9KTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCkKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsK
LSAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVz
QWdlQ2FwKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAppbmRleCBlMzExNzdh
MTJhOTgyODc3YTAwZWIwNjQ0NjMxOWMzM2FjZjE5YjM3Li5jYTFkOTJhZGVjYzBjNGQ1MGU3ZTlj
ZDM0MmQ1NmQxNDFjNWEwZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTcgKzI3LDEzIEBACiAKICNpZiBFTkFCTEUoUkVT
T1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQogCi0jaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIK
ICNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKICNpbmNsdWRlIDx3
dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAKLSNpZiBIQVZF
KENPUkVfUFJFRElDVElPTikKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllckNvY29hLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgS2V5ZWRE
ZWNvZGVyOwogY2xhc3MgS2V5ZWRFbmNvZGVyOwpAQCAtNDYsMzUgKzQyLDE5IEBAIHN0cnVjdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgT3Bl
cmF0aW5nRGF0ZTsKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFn
ZTsKIAogLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9u
IHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgot
Y2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIDogcHVibGljIENhbk1ha2VX
ZWFrUHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4geworY2xhc3MgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlIGZpbmFsIDogcHVibGljIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZSB7CiBwdWJsaWM6Ci0gICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyA9IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7Ci0gICAgdXNpbmcgUmVnaXN0cmFi
bGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBUb3BGcmFt
ZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFN1YkZyYW1l
RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgU3ViUmVzb3Vy
Y2VEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVj
dERvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0
ZWRGcm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVk
aXJlY3RlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcg
TmF2aWdhdGVkRnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVz
aW5nIE5hdmlnYXRlZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAg
dXNpbmcgRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVE
b21haW47Ci0gICAgdXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21h
aW47Ci0gICAgdXNpbmcgT3BlbmVyUGFnZUlEID0gdWludDY0X3Q7Ci0gICAgdXNpbmcgUGFnZUlE
ID0gdWludDY0X3Q7Ci0gICAgdXNpbmcgRnJhbWVJRCA9IHVpbnQ2NF90OwotCiAgICAgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZSYsIFdvcmtRdWV1ZSYpOwotICAgIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUo
KTsKIAogICAgIHZvaWQgc2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlJik7CiAKLSAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJj
ZVN0YXRpc3RpY3NNYXAuaXNFbXB0eSgpOyB9CisgICAgdm9pZCBjbGVhcihDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgY29uc3QgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFpbiwgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcz4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3Rh
dGlzdGljc01hcDsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OktleWVkRW5jb2Rl
cj4gY3JlYXRlRW5jb2RlckZyb21EYXRhKCkgY29uc3Q7CiAgICAgdm9pZCBtZXJnZVdpdGhEYXRh
RnJvbURlY29kZXIoV2ViQ29yZTo6S2V5ZWREZWNvZGVyJik7CkBAIC04MiwxNDcgKzYyLDgxIEBA
IHB1YmxpYzoKICAgICB2b2lkIG1lcmdlU3RhdGlzdGljcyhWZWN0b3I8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4mJik7CiAgICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljcyhjb25zdCBGdW5jdGlvbjx2
b2lkKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKT4mKSBjb25zdDsKIAotICAgIHZvaWQg
dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2
b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNsZWFy
QmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0KLSAgICB2b2lkIGluY2x1ZGVUb2RheUFz
T3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgdm9pZCBwcm9jZXNzU3RhdGlzdGljc0Fu
ZERhdGFSZWNvcmRzKCk7Ci0KLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVu
ZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9t
YWluJiYpOwotICAgIHZvaWQgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwotCi0gICAgdm9pZCBncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEo
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKLSAgICB2b2lkIGNhbmNlbFBlbmRpbmdTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CiAKLSAgICBib29sIGlzUmVn
aXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0
IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1l
VW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0
OwotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRG
cm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBj
bGFzc2lmeVByZXZhbGVudFJlc291cmNlcygpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3Jh
Z2VJZk5lZWRlZCgpIG92ZXJyaWRlOworICAgIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgp
IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJik7Ci0gICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkg
Y29uc3Q7Ci0gICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7Ci0gICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKTsKLSAgICB2b2lkIHNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nl
c3NVbmRlck9wZW5lcihEb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgT3BlbmVyUGFnZUlE
LCBPcGVuZXJEb21haW4mJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZhbHVlKTsKLSAgICBib29sIGlzR3JhbmRm
YXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIHZvaWQgZ3JhbmRm
YXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYpIG92
ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOwotICAgIHZvaWQgc2V0U3Vi
cmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29u
c3QgVG9wRnJhbWVEb21haW4mKTsKLSAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0g
ICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0gICAgdm9pZCBzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFp
biYpOwotICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgVG9wRnJh
bWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpOworICAgIGJvb2wgaXNSZWdpc3RlcmVk
QXNTdWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJh
bWVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJh
bWVVbmRlcihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3Qg
UmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIHZvaWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworICAg
IHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92
ZXJyaWRlOworICAgIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHNldFBy
ZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBv
dmVycmlkZTsKIAotICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGlt
dW1FbnRyeUNvdW50KTsKLSAgICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1
bmVUYXJnZXRDb3VudCk7Ci0gICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMo
KTsKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBi
b29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBjYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKSBjb25zdDsKKyAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9t
YWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3Qg
UmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVk
aXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BG
cmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IHNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQoYm9vbCk7Ci0gICAgdm9p
ZCBzZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbChib29s
KTsKLSAgICB2b2lkIHNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sKTsKLSAgICB2b2lkIHNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRNaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyk7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlKGJvb2wpOwotICAgIGJvb2wgaXNEZWJ1Z01vZGVFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9OwotICAgIHZvaWQgc2V0UHJldmFsZW50UmVz
b3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIGNh
bGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBo
YXNTdG9yYWdlQWNjZXNzKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmKTsKLSAgICB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYs
IFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJRCwgYm9vbCBwcm9tcHRFbmFibGVkLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NTdGF0dXMpPiYmKTsKLSAgICB2b2lk
IGdyYW50U3RvcmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBG
cmFtZUlELCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93LCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmKTsKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJh
bWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdl
SUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQg
cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwg
RnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgZ3JhbnRTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBh
Z2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2
aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZy
b21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpOwotICAgIHZvaWQg
bG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBsb2dT
dWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKTsKLSAgICB2b2lkIGxvZ1N1YnJlc291cmNlUmVk
aXJlY3QoY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21h
aW4mKTsKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0RvbWFp
biYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGJv
b2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92ZXJyaWRlOworICAgIHZvaWQgbG9n
U3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBjbGVhclVzZXJJbnRlcmFj
dGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwotICAgIGJvb2wgaGFzSGFkVXNlckludGVy
YWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCBjbGVhclVzZXJJbnRl
cmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIGJvb2wgaGFz
SGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcyk7
Ci0KLSAgICB2b2lkIGRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7Ci0KLSAgICBjb25zdCBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9zdG9y
ZTsgfQorICAgIHZvaWQgc2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNv
bmRzKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbG9ja0Fu
ZEtlZXBDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAgICBzdGF0aWMg
Ym9vbCBzaG91bGRCbG9ja0FuZFB1cmdlQ29va2llcyhjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJik7CiAgICAgc3RhdGljIGJvb2wgaGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3Vn
aFByb21wdChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgY29uc3QgUmVnaXN0cmFibGVE
b21haW4mKTsKICAgICBib29sIGhhc0hhZFVuZXhwaXJlZFJlY2VudFVzZXJJbnRlcmFjdGlvbihS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7Ci0gICAgYm9vbCBoYXNTdGF0aXN0aWNzRXhw
aXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJikgY29uc3Q7CiAgICAgYm9vbCB3YXNB
Y2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvVXNlckludGVyYWN0aW9uKGNvbnN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmIGN1cnJlbnQsIGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHVwZGF0
ZWQpIGNvbnN0OworICAgIHZvaWQgaW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFp
bnMoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiwgUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZSk7CiAgICAgdW5zaWduZWQgcmVjdXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVS
ZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBIYXNo
U2V0PFJlZGlyZWN0ZWRUb0RvbWFpbj4mLCB1bnNpZ25lZCBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxz
KSBjb25zdDsKLSAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChib29sIGVu
YWJsZWQpIHsgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgID0gZW5hYmxlZDsgfQotICAg
IGJvb2wgc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdDsKLSAgICB2b2lkIHNldERlYnVn
TG9nZ2dpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgID0g
ZW5hYmxlZDsgfQotICAgIHZvaWQgc2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQoYm9vbCk7Ci0g
ICAgdm9pZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7
CiAgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBU
b3BGcmFtZURvbWFpbiYmLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBib29sIHVzZXJXYXNQ
cm9tcHRlZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CiAg
ICAgdm9pZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzJik7CiAgICAgYm9vbCBpc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVu
c3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYpOwotICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKKyAgICB2b2lkIHBydW5l
U3RhdGlzdGljc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CiAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVn
aXN0cmFibGVEb21haW4mKTsKLSAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IHJlZ2lzdHJh
YmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKLSAgICB2b2lkIHNldENhY2hlTWF4
QWdlQ2FwKFNlY29uZHMpOwotICAgIHZvaWQgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKTsKLSAgICB2
b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMpOwotICAgIHZvaWQgdXBk
YXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOwotI2VuZGlmCisgICAgVmVjdG9y
PFJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRh
Rm9yKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQorCiAKLSAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7Ci0gICAgICAgIHNpemVf
dCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKLSAgICAgICAgc2l6ZV90IG1heFN0YXRpc3Rp
Y3NFbnRyaWVzIHsgMTAwMCB9OwotICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9MaXZl
VXNlckludGVyYWN0aW9uOwotICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCB7IDFfaCB9OwotICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGlt
ZSB7IDI0X2ggKiA3IH07Ci0gICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBUaW1lIHsgMjRf
aCAqIDcgfTsKLSAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWUgeyAy
NF9oICogNyB9OwotICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRz
V2VyZVNjYW5uZWQgeyBmYWxzZSB9OwotICAgICAgICBib29sIHNob3VsZENsYXNzaWZ5UmVzb3Vy
Y2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OwotICAgICAgICBib29sIHNob3Vs
ZFN1Ym1pdFRlbGVtZXRyeSB7IHRydWUgfTsKLSAgICB9OwotCi0gICAgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJiBtX3N0b3JlOwotICAgIFJlZjxXb3JrUXVldWU+IG1fd29ya1F1ZXVl
OwogICAgIFdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBt
X3BlcnNpc3RlbnRTdG9yYWdlOwogICAgIEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291
cmNlTG9hZFN0YXRpc3RpY3M+IG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwOwotI2lmIEhBVkUoQ09S
RV9QUkVESUNUSU9OKQotICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2Eg
bV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjsKLSNlbHNlCi0gICAgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXIgbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
cjsKLSNlbmRpZgotI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIEhhc2hTZXQ8
dWludDY0X3Q+IG1fYWN0aXZlUGx1Z2luVG9rZW5zOwotI2VuZGlmCi0gICAgUGFyYW1ldGVycyBt
X3BhcmFtZXRlcnM7Ci0gICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7
Ci0gICAgV2FsbFRpbWUgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOwotICAgIGJvb2wg
bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fZGVidWdNb2RlRW5h
YmxlZCB7IGZhbHNlIH07Ci0gICAgY29uc3QgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1Z1N0YXRp
Y1ByZXZhbGVudFJlc291cmNlIHsgVVJMIHsgVVJMKCksICJodHRwczovLzNyZHBhcnR5dGVzdHdl
YmtpdC5vcmciX3MgfSB9OwotICAgIFJlZ2lzdHJhYmxlRG9tYWluIG1fZGVidWdNYW51YWxQcmV2
YWxlbnRSZXNvdXJjZTsKLSAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgeyBmYWxzZSB9Owot
ICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQ7Ci0KLSAg
ICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHsg
MCB9OwotICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2lu
Z1JlcXVlc3RJZGVudGlmaWVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSkgeyByZXR1cm4gc3RvcmUuaXNNZW1vcnlTdG9yZSgp
OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjkyMzI0NTVmNjVl
Yzg2ODg0MzdhYzE3ODMyYjgwYmQwYmY3MzRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAKQEAgLTAsMCArMSw1NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisKKyNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCIK
KyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJTdG9yYWdlQWNjZXNzU3Rh
dHVzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9O
ZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK2NvbnN0ZXhwciBTZWNvbmRzIG1pbmltdW1TdGF0aXN0aWNz
UHJvY2Vzc2luZ0ludGVydmFsIHsgNV9zIH07Citjb25zdGV4cHIgdW5zaWduZWQgb3BlcmF0aW5n
RGF0ZXNXaW5kb3cgeyAzMCB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECitzdGF0aWMg
U3RyaW5nIGRvbWFpbnNUb1N0cmluZyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zKQoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBmb3IgKGF1dG8mIGRv
bWFpbiA6IGRvbWFpbnMpIHsKKyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoZG9tYWluLnN0cmluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKK30KKyNlbmRpZgorCitPcGVyYXRpbmdEYXRlIE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGlt
ZShXYWxsVGltZSB0aW1lKQoreworICAgIGRvdWJsZSBtcyA9IHRpbWUuc2Vjb25kc1NpbmNlRXBv
Y2goKS5taWxsaXNlY29uZHMoKTsKKyAgICBpbnQgeWVhciA9IG1zVG9ZZWFyKG1zKTsKKyAgICBp
bnQgeWVhckRheSA9IGRheUluWWVhcihtcywgeWVhcik7CisgICAgaW50IG1vbnRoID0gbW9udGhG
cm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOworICAgIGludCBtb250aERh
eSA9IGRheUluTW9udGhGcm9tRGF5SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwor
CisgICAgcmV0dXJuIE9wZXJhdGluZ0RhdGUgeyB5ZWFyLCBtb250aCwgbW9udGhEYXkgfTsKK30K
KworT3BlcmF0aW5nRGF0ZSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpCit7CisgICAgcmV0dXJuIE9w
ZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkpOworfQorCitTZWNvbmRz
IE9wZXJhdGluZ0RhdGU6OnNlY29uZHNTaW5jZUVwb2NoKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U2Vjb25kcyB7IGRhdGVUb0RheXNGcm9tMTk3MChtX3llYXIsIG1fbW9udGgsIG1fbW9udGhEYXkp
ICogc2Vjb25kc1BlckRheSB9OworfQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPT0o
Y29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbW9udGhE
YXkgPT0gb3RoZXIubV9tb250aERheSAmJiBtX21vbnRoID09IG90aGVyLm1fbW9udGggJiYgbV95
ZWFyID09IG90aGVyLm1feWVhcjsKK30KKworYm9vbCBPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcjwo
Y29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNlY29uZHNT
aW5jZUVwb2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOworfQorCitib29sIE9wZXJh
dGluZ0RhdGU6Om9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVwb2NoKCkgPD0gb3RoZXIuc2Vjb25kc1NpbmNlRXBv
Y2goKTsKK30KKworUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSwgV29ya1F1
ZXVlJiB3b3JrUXVldWUpCisgICAgOiBtX3N0b3JlKHN0b3JlKQorICAgICwgbV93b3JrUXVldWUo
d29ya1F1ZXVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKK30KKworUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKK30KKwordW5zaWduZWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpjb21wdXRlSW1wb3J0YW5jZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKK3sKKyAgICB1bnNpZ25lZCBpbXBvcnRhbmNlID0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptYXhJbXBvcnRhbmNlOworICAgIGlmICghcmVzb3Vy
Y2VTdGF0aXN0aWMuaXNQcmV2YWxlbnRSZXNvdXJjZSkKKyAgICAgICAgaW1wb3J0YW5jZSAtPSAx
OworICAgIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaGFkVXNlckludGVyYWN0aW9uKQorICAgICAg
ICBpbXBvcnRhbmNlIC09IDI7CisgICAgcmV0dXJuIGltcG9ydGFuY2U7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dl
cmVTY2FubmVkKGJvb2wgdmFsdWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
CisgICAgbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wgdmFs
dWUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgbV9wYXJhbWV0ZXJz
LnNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsID0gdmFsdWU7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRTdWJtaXRU
ZWxlbWV0cnkoYm9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkU3VibWl0VGVsZW1ldHJ5ID0gdmFsdWU7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisKKyAgICBpZiAoIXNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkpIHsKKyAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQorICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmNsZWFyKCk7CisgICAg
Zm9yIChjb25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9u
KCkucGx1Z2luUHJvY2Vzc2VzKCkpCisgICAgICAgIG1fYWN0aXZlUGx1Z2luVG9rZW5zLmFkZChw
bHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKTsKKyNlbmRpZgorCisgICAgYXV0byBwcmV2YWxl
bnRSZXNvdXJjZURvbWFpbnMgPSByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRh
Rm9yKCk7CisgICAgaWYgKHByZXZhbGVudFJlc291cmNlRG9tYWlucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFi
bGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byByZW1vdmUgZGF0YSBy
ZWNvcmRzIGZvciAle3B1YmxpY31zLiIsIGRvbWFpbnNUb1N0cmluZyhwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKKyAgICBzZXREYXRhUmVjb3Jkc0Jl
aW5nUmVtb3ZlZCh0cnVlKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbcHJldmFs
ZW50UmVzb3VyY2VEb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KHByZXZhbGVudFJlc291cmNlRG9t
YWlucyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIoKnRoaXMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0g
bV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQs
IHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IGlmICghd2Vha1RoaXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3ZWFrVGhpcy0+bV9zdG9yZS5kZWxldGVXZWJz
aXRlRGF0YUZvclJlZ2lzdHJhYmxlRG9tYWluc0luQWxsUGVyc2lzdGVudERhdGFTdG9yZXMoV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgV1RGTW92
ZShwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMpLCBzaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVj
b3Jkc1dlcmVTY2FubmVkLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYoKV0oY29u
c3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVE
YXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2goW2RvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNXaXRoRGVsZXRl
ZFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBX
VEZNb3ZlKHdlYWtUaGlzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFr
VGhpcykgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5pbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhXVEZNb3ZlKGRvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPnNldERh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjaygp
OworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYod2Vha1RoaXMtPm1fZGVidWdMb2dnaW5nRW5hYmxlZCwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RlYnVnLCAiRG9uZSByZW1vdmluZyBkYXRhIHJlY29yZHMuIik7CisjZW5kaWYKKyAg
ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKQorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fcGFyYW1ldGVycy5z
aG91bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCkKKyAgICAgICAg
Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKTsKKyAgICAKKyAgICByZW1vdmVEYXRhUmVjb3Jk
cyhbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldICgpIG11dGFibGUgeworICAg
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgp
OworICAgICAgICBzeW5jU3RvcmFnZUlmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX3BhcmFt
ZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMs
IHdlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyldIHsKKyAgICAgICAgICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CisgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgbV9zdG9yZS5ub3RpZnlSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUHJvY2Vzc2VkKCk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHNob3Vs
ZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRlcnMuc2hv
dWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVlID0gbV93
b3JrUXVldWUuY29weVJlZigpLCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSldICgpIG11dGFibGUg
eworICAgICAgICBzdG9yZS0+cmVnaXN0cmFibGVEb21haW5zV2l0aFdlYnNpdGVEYXRhKFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIHNob3VsZE5v
dGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIFt3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3b3JrUXVldWUgPSB3b3Jr
UXVldWUuY29weVJlZigpXSAoSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mJiBkb21haW5zV2l0
aFdlYnNpdGVEYXRhKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHdvcmtRdWV1ZS0+ZGlzcGF0Y2go
W3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyksIGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEgPSBj
cm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHdlYWtUaGlzLT5n
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpOworICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5tX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSBXYWxs
VGltZTo6bm93KCkgKyB3ZWFrVGhpcy0+bV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZTsK
KyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpOworICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmxvZ1Rl
c3RpbmdFdmVudCgiR3JhbmRmYXRoZXJlZCJfcyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgZW5hYmxlKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
aWYgKGVuYWJsZSkKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJUdXJuZWQgSVRQIERlYnVnIE1vZGUgb24uIik7CisjZW5kaWYKKworICAgIG1f
ZGVidWdNb2RlRW5hYmxlZCA9IGVuYWJsZTsKKyAgICBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQgPSBl
bmFibGU7CisKKyAgICBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKTsKKyAg
ICAvLyBUaGlzIHdpbGwgbG9nIHRoZSBjdXJyZW50IGNvb2tpZSBibG9ja2luZyBzdGF0ZS4KKyAg
ICBpZiAoZW5hYmxlKQorICAgICAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJj
ZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIG1f
ZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IGRvbWFpbjsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0
SWZOZWNlc3NhcnkoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
bV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICsrbV9sYXN0
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBtX3dvcmtRdWV1ZS0+
ZGlzcGF0Y2hBZnRlcihtaW5pbXVtU3RhdGlzdGljc1Byb2Nlc3NpbmdJbnRlcnZhbCwgW3RoaXMs
IHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBzdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZGVudGlmaWVyID0gKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50
aWZpZXJdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoIW1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgfHwgKm1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgIT0g
c3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcikgeworICAgICAgICAgICAgLy8g
VGhpcyByZXF1ZXN0IGhhcyBiZWVuIGNhbmNlbGVkLgorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOworICAgICAg
ICBwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgPSBXVEY6Om51
bGxvcHQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJh
bWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPSBzZWNvbmRzOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJzLm1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA9IHNlY29uZHM7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25k
cyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIEFTU0VS
VChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1l
ID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldENh
Y2hlTWF4QWdlQ2FwKFNlY29uZHMgc2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKyAgICBBU1NFUlQoc2Vjb25kcyA+PSAwX3MpOworCisgICAgbV9wYXJhbWV0ZXJz
LmNhY2hlTWF4QWdlQ2FwVGltZSA9IHNlY29uZHM7CisgICAgdXBkYXRlQ2FjaGVNYXhBZ2VDYXAo
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNhY2hlTWF4
QWdlQ2FwKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBS
dW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25k
cyA9IG1fcGFyYW1ldGVycy5jYWNoZU1heEFnZUNhcFRpbWVdICgpIHsKKyAgICAgICAgc3RvcmUt
PnNldENhY2hlTWF4QWdlQ2FwKHNlY29uZHMsIFtdIHsgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2ll
cyhTZWNvbmRzIHNlY29uZHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Cisg
ICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKKyAgICAKKyAgICBtX3BhcmFtZXRlcnMuY2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1cGRhdGVDbGllbnRTaWRlQ29v
a2llc0FnZUNhcCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBk
YXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc2Vjb25kcyA9
IG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2llc0FnZUNhcFRpbWVdICgpIHsKKyAgICAgICAg
aWYgKGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gc3RvcmUtPm5ldHdvcmtTZXNzaW9uKCkpCisgICAg
ICAgICAgICBuZXR3b3JrU2Vzc2lvbi0+bmV0d29ya1N0b3JhZ2VTZXNzaW9uKCkuc2V0QWdlQ2Fw
Rm9yQ2xpZW50U2lkZUNvb2tpZXMoc2Vjb25kcyk7CisgICAgfSk7CisjZW5kaWYKK30KKworYm9v
bCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX2Rh
dGFSZWNvcmRzQmVpbmdSZW1vdmVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHBsdWdpbiA6IFBs
dWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzZXMoKSkgeworICAg
ICAgICBpZiAoIW1fYWN0aXZlUGx1Z2luVG9rZW5zLmNvbnRhaW5zKHBsdWdpbi0+cGx1Z2luUHJv
Y2Vzc1Rva2VuKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2VuZGlmCisK
KyAgICByZXR1cm4gIW1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkIHx8IE1vbm90b25p
Y1RpbWU6Om5vdygpID49IChtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCArIG1fcGFy
YW1ldGVycy5taW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92ZWQo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1f
ZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgPSB2YWx1ZTsKKyAgICBpZiAobV9kYXRhUmVjb3Jkc0Jl
aW5nUmVtb3ZlZCkKKyAgICAgICAgbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+JiBkb21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IAorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgICAgICBzdG9yZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0Zv
ckhhbmRsZXIoZG9tYWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0pOworfQorICAgIAorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21h
aW4+JiBkb21haW5zLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoZG9tYWlu
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtl
UmVmKG1fc3RvcmUpLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpXSB7CisgICAg
ICAgIHN0b3JlLT5jYWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoZG9tYWlucyk7CisgICAgfSk7CisK
KyAgICBjb21wbGV0aW9uSGFuZGxlcigpOworfQorCitPcHRpb25hbDxTZWNvbmRzPiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCkgY29uc3QKK3sK
KyAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pCisgICAgICAg
IHJldHVybiBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKSAtIG1fcGFyYW1ldGVy
cy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCk7CisgICAgCisgICAgaWYgKG1fb3Bl
cmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJhdGluZ0RhdGVzV2luZG93KQorICAgICAgICByZXR1
cm4gbV9vcGVyYXRpbmdEYXRlcy5maXJzdCgpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgCisg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworVmVjdG9yPE9wZXJhdGluZ0RhdGU+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBWZWN0b3I8
T3BlcmF0aW5nRGF0ZT4mIGV4aXN0aW5nRGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5l
d0RhdGVzKQoreworICAgIGlmIChleGlzdGluZ0RhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIFdURk1vdmUobmV3RGF0ZXMpOworICAgIAorICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBt
ZXJnZWREYXRlcyhleGlzdGluZ0RhdGVzLnNpemUoKSArIG5ld0RhdGVzLnNpemUoKSk7CisgICAg
CisgICAgLy8gTWVyZ2UgdGhlIHR3byBzb3J0ZWQgdmVjdG9ycyBvZiBkYXRlcy4KKyAgICBzdGQ6
Om1lcmdlKGV4aXN0aW5nRGF0ZXMuYmVnaW4oKSwgZXhpc3RpbmdEYXRlcy5lbmQoKSwgbmV3RGF0
ZXMuYmVnaW4oKSwgbmV3RGF0ZXMuZW5kKCksIG1lcmdlZERhdGVzLmJlZ2luKCkpOworICAgIC8v
IFJlbW92ZSBkdXBsaWNhdGUgZGF0ZXMuCisgICAgcmVtb3ZlUmVwZWF0ZWRFbGVtZW50cyhtZXJn
ZWREYXRlcyk7CisgICAgCisgICAgLy8gRHJvcCBvbGQgZGF0ZXMgdW50aWwgdGhlIFZlY3RvciBz
aXplIHJlYWNoZXMgb3BlcmF0aW5nRGF0ZXNXaW5kb3cuCisgICAgd2hpbGUgKG1lcmdlZERhdGVz
LnNpemUoKSA+IG9wZXJhdGluZ0RhdGVzV2luZG93KQorICAgICAgICBtZXJnZWREYXRlcy5yZW1v
dmUoMCk7CisgICAgCisgICAgcmV0dXJuIG1lcmdlZERhdGVzOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bWVyZ2VPcGVyYXRpbmdEYXRlcyhWZWN0b3I8T3BlcmF0aW5n
RGF0ZT4mJiBuZXdEYXRlcykKK3sKKyAgICBtX29wZXJhdGluZ0RhdGVzID0gbWVyZ2VPcGVyYXRp
bmdEYXRlcyhtX29wZXJhdGluZ0RhdGVzLCBXVEZNb3ZlKG5ld0RhdGVzKSk7Cit9CisKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJ
Zk5lY2Vzc2FyeSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBh
dXRvIHRvZGF5ID0gT3BlcmF0aW5nRGF0ZTo6dG9kYXkoKTsKKyAgICBpZiAoIW1fb3BlcmF0aW5n
RGF0ZXMuaXNFbXB0eSgpICYmIHRvZGF5IDw9IG1fb3BlcmF0aW5nRGF0ZXMubGFzdCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICB3aGlsZSAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3Bl
cmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIG1fb3BlcmF0aW5nRGF0ZXMucmVtb3ZlKDApOwor
CisgICAgbV9vcGVyYXRpbmdEYXRlcy5hcHBlbmQodG9kYXkpOworfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7CisgICAgCisgICAgaWYgKG1fb3BlcmF0aW5nRGF0ZXMuc2l6ZSgpID49IG9wZXJh
dGluZ0RhdGVzV2luZG93KSB7CisgICAgICAgIGlmIChPcGVyYXRpbmdEYXRlOjpmcm9tV2FsbFRp
bWUobW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIDwgbV9vcGVyYXRpbmdEYXRlcy5maXJz
dCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIElmIHdl
IGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlzdGljLCBj
aGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1haW5seSBm
b3IgdGVzdGluZykuCisgICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0
aW9uKSB7CisgICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiBtb3N0UmVjZW50VXNlckludGVy
YWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlckludGVyYWN0aW9uLnZhbHVl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzU3RhdGlzdGlj
c0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1N0YXRpc3RpY3NFeHBpcmVkKHJlc291cmNlU3RhdGlz
dGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVt
RW50cnlDb3VudCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIG1f
cGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyA9IG1heGltdW1FbnRyeUNvdW50OworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRv
KHNpemVfdCBwcnVuZVRhcmdldENvdW50KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgbV9wYXJhbWV0ZXJzLnBydW5lRW50cmllc0Rvd25UbyA9IHBydW5lVGFyZ2V0
Q291bnQ7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFt
ZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgbV9wYXJhbWV0ZXJzID0geyB9OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYgZXZlbnQpCit7CisgICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgZXZlbnQgPSBldmVudC5pc29sYXRlZENvcHko
KV0geworICAgICAgICBzdG9yZS0+bG9nVGVzdGluZ0V2ZW50KGV2ZW50KTsKKyAgICB9KTsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZUFsbFN0b3JhZ2VBY2Nl
c3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRj
aChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+cmVtb3ZlQWxs
U3RvcmFnZUFjY2Vzcyhbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICBz
dG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9KTsK
K30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmRpZENyZWF0ZU5ldHdvcmtQ
cm9jZXNzKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHVwZGF0
ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwor
ICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciog
YWN0aW9uLCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKQoreworI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXRpYyBjb25zdCBhdXRvIG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50ID0gNTA7CisgICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGRvbWFpbnMuc2l6ZSgpIDw9IG1heE51
bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0lO
Rk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29r
aWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvcjogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGRv
bWFpbnNUb1N0cmluZyhkb21haW5zKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGJhdGNoOworICAgIGJh
dGNoLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0
ZW1lbnQpOworICAgIGF1dG8gYmF0Y2hOdW1iZXIgPSAxOworICAgIHVuc2lnbmVkIG51bWJlck9m
QmF0Y2hlcyA9IHN0ZDo6Y2VpbChkb21haW5zLnNpemUoKSAvIHN0YXRpY19jYXN0PGZsb2F0Piht
YXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkpOworICAgIAorICAgIGZvciAoYXV0
byYgZG9tYWluIDogZG9tYWlucykgeworICAgICAgICBpZiAoYmF0Y2guc2l6ZSgpID09IG1heE51
bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xP
R19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvICV7cHVibGljfXMg
Y29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVibGljfWQgb2YgJXUpOiAl
e3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9mQmF0Y2hlcywgZG9tYWlu
c1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJhdGNoLnNocmlu
aygwKTsKKyAgICAgICAgICAgICsrYmF0Y2hOdW1iZXI7CisgICAgICAgIH0KKyAgICAgICAgYmF0
Y2guYXBwZW5kKGRvbWFpbik7CisgICAgfQorICAgIGlmICghYmF0Y2guaXNFbXB0eSgpKQorICAg
ICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvICV7cHVibGljfXMgY29va2llcyBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBmb3IgKCV7cHVi
bGljfWQgb2YgJXUpOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgYmF0Y2hOdW1iZXIsIG51bWJlck9m
QmF0Y2hlcywgZG9tYWluc1RvU3RyaW5nKGJhdGNoKS51dGY4KCkuZGF0YSgpKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGFjdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGRvbWFpbnMpOworI2Vu
ZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMmU3YjYzNjhjZjM0MTgyZTdj
MDdjNzcyM2FjMmRiYTQzZDVlMTA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBA
IC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
UkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0NsYXNzaWZpZXIuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKyNpbmNsdWRlIDx3dGYvV29ya1F1
ZXVlLmg+CisKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKKyNpbmNsdWRlICJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgS2V5ZWREZWNvZGVyOworY2xhc3MgS2V5ZWRFbmNvZGVyOworc3RydWN0IFJl
c291cmNlTG9hZFN0YXRpc3RpY3M7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CisKK2NsYXNzIE9wZXJhdGlu
Z0RhdGUgeworcHVibGljOgorICAgIE9wZXJhdGluZ0RhdGUoKSA9IGRlZmF1bHQ7CisgICAgCisg
ICAgc3RhdGljIE9wZXJhdGluZ0RhdGUgZnJvbVdhbGxUaW1lKFdhbGxUaW1lKTsKKyAgICBzdGF0
aWMgT3BlcmF0aW5nRGF0ZSB0b2RheSgpOworICAgIFNlY29uZHMgc2Vjb25kc1NpbmNlRXBvY2go
KSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIp
IGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGluZ0RhdGUmIG90aGVyKSBj
b25zdDsKKyAgICBib29sIG9wZXJhdG9yPD0oY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICBPcGVyYXRpbmdEYXRlKGludCB5ZWFyLCBpbnQgbW9u
dGgsIGludCBtb250aERheSkKKyAgICAgICAgOiBtX3llYXIoeWVhcikKKyAgICAgICAgLCBtX21v
bnRoKG1vbnRoKQorICAgICAgICAsIG1fbW9udGhEYXkobW9udGhEYXkpCisgICAgeyB9CisKKyAg
ICBpbnQgbV95ZWFyIHsgMCB9OworICAgIGludCBtX21vbnRoIHsgMCB9OyAvLyBbMCwgMTFdLgor
ICAgIGludCBtX21vbnRoRGF5IHsgMCB9OyAvLyBbMSwgMzFdLgorfTsKKworLy8gVGhpcyBpcyBh
bHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8gZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZT4geworcHVibGljOgorICAgIHVzaW5nIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
PSBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzOworICAgIHVzaW5nIFJlZ2lzdHJhYmxl
RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgVG9wRnJhbWVE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBTdWJGcmFtZURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFN1YlJlc291cmNl
RG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgUmVkaXJlY3RE
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBSZWRpcmVjdGVk
RnJvbURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFJlZGly
ZWN0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE5h
dmlnYXRlZEZyb21Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2lu
ZyBOYXZpZ2F0ZWRUb0RvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVz
aW5nIERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9t
YWluOworICAgIHVzaW5nIE9wZW5lckRvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWlu
OworICAgIHVzaW5nIE9wZW5lclBhZ2VJRCA9IHVpbnQ2NF90OworICAgIHVzaW5nIFBhZ2VJRCA9
IHVpbnQ2NF90OworICAgIHVzaW5nIEZyYW1lSUQgPSB1aW50NjRfdDsKKyAgICAKKyAgICB2aXJ0
dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbXB0eSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb29raWVCbG9j
a2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpID0gMDsKKyAgICB2b2lkIHVwZGF0ZUNv
b2tpZUJsb2NraW5nRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBk
b21haW5zVG9CbG9jaywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWlucywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKworICAgIHZvaWQgaW5j
bHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICB2b2lkIHByb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1N0b3JhZ2VJZk5l
ZWRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKERv
bWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRvbWFpbiYm
KSA9IDA7CisgICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CisKKyAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRp
c3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworCisgICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1
YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZHVtcFJlc291
cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUHJldmFs
ZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25z
dCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyeVByZXZh
bGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIHZh
bHVlKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRSZWNv
cmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFz
aFNldDxSZWdpc3RyYWJsZURvbWFpbj4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3Vi
ZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9w
RnJhbWVEb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9t
YWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3Qg
U3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJl
Y3REb21haW4mKSA9IDA7CisKKyAgICB2b2lkIGxvZ1Rlc3RpbmdFdmVudChjb25zdCBTdHJpbmcm
KTsKKworICAgIHZvaWQgc2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRy
eUNvdW50KTsKKyAgICB2b2lkIHNldFBydW5lRW50cmllc0Rvd25UbyhzaXplX3QgcHJ1bmVUYXJn
ZXRDb3VudCk7CisgICAgdm9pZCByZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsKKyAg
ICBPcHRpb25hbDxTZWNvbmRzPiBzdGF0aXN0aWNzRXBpcmF0aW9uVGltZSgpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVtZXRyeSgpIGNvbnN0ID0gMDsK
KworICAgIHZvaWQgc2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29s
KTsKKyAgICB2b2lkIHNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNS
ZW1vdmFsKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwor
ICAgIHZvaWQgc2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKKyAgICB2b2lk
IHNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKKyAgICB2
b2lkIHNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzKTsKKyAgICB2b2lkIHNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCk7CisgICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnTW9kZUVuYWJsZWQ7IH07CisgICAgdm9pZCBzZXRQ
cmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwor
CisgICAgdmlydHVhbCB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4m
LCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVz
dFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJ
RCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3Rv
cmFnZUFjY2Vzc1N0YXR1cyk+JiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ3JhbnRTdG9yYWdl
QWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBhZ2VJ
RCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgTmF2
aWdhdGVkVG9Eb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IE5hdmlnYXRlZEZy
b21Eb21haW4mLCBib29sIGlzUmVkaXJlY3QsIGJvb2wgaXNNYWluRnJhbWUpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9nVXNlckludGVyYWN0aW9uKGNvbnN0IFRvcEZyYW1lRG9tYWluJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIFdhbGxUaW1lIGxhc3RTZWVuKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVkaXJlY3Rl
ZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSA9IDA7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGhhc0hhZFVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXN0U2Vlbihjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgcHJpbWFyeURvbWFpbiwgU2Vjb25kcykgPSAwOworCisgICAgdm9p
ZCBkaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOworCisgICAgY29uc3QgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlJiBzdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmU7IH0KKworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKKworICAgIHZp
cnR1YWwgYm9vbCBpc01lbW9yeVN0b3JlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNEYXRhYmFzZVN0b3JlKCljb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBzdGF0aWMgVmVjdG9yPE9wZXJh
dGluZ0RhdGU+IG1lcmdlT3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGluZ0RhdGU+
JiBleGlzdGluZ0RhdGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcyk7CisgICAg
c3RhdGljIHZvaWQgZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKGNvbnN0IGNoYXIqIGFjdGlvbiwg
Y29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWlucyk7CisKKyAgICBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29y
a1F1ZXVlJik7CisKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0IFJlc291cmNl
TG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKKyAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKFdh
bGxUaW1lIG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSBjb25zdDsKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICB2b2lkIHJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKKyNlbmRp
ZgorICAgIHZvaWQgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2Fy
eSgpOworICAgIHZvaWQgbWVyZ2VPcGVyYXRpbmdEYXRlcyhWZWN0b3I8T3BlcmF0aW5nRGF0ZT4m
Jik7CisgICAgdmlydHVhbCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IGVuc3VyZVByZXZhbGVu
dFJlc291cmNlc0ZvckRlYnVnTW9kZSgpID0gMDsKKyAgICB2aXJ0dWFsIFZlY3RvcjxSZWdpc3Ry
YWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSA9IDA7CisKKyAg
ICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlKCkgeyByZXR1cm4gbV9zdG9y
ZTsgfQorICAgIFJlZjxXb3JrUXVldWU+JiB3b3JrUXVldWUoKSB7IHJldHVybiBtX3dvcmtRdWV1
ZTsgfQorI2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorICAgIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyQ29jb2EmIGNsYXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyOyB9CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyJiBjbGFzc2lmaWVyKCkgeyByZXR1cm4gbV9yZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllcjsgfQorI2VuZGlmCisKKyAgICBzdHJ1Y3QgUGFyYW1ldGVycyB7CisgICAgICAg
IHNpemVfdCBwcnVuZUVudHJpZXNEb3duVG8geyA4MDAgfTsKKyAgICAgICAgc2l6ZV90IG1heFN0
YXRpc3RpY3NFbnRyaWVzIHsgMTAwMCB9OworICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1l
VG9MaXZlVXNlckludGVyYWN0aW9uOworICAgICAgICBTZWNvbmRzIG1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCB7IDFfaCB9OworICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVy
aW5nVGltZSB7IDI0X2ggKiA3IH07CisgICAgICAgIFNlY29uZHMgY2FjaGVNYXhBZ2VDYXBUaW1l
IHsgMjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcFRp
bWUgeyAyNF9oICogNyB9OworICAgICAgICBib29sIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIHNob3VsZENsYXNzaWZ5
UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsIHsgdHJ1ZSB9OworICAgICAgICBib29s
IHNob3VsZFN1Ym1pdFRlbGVtZXRyeSB7IHRydWUgfTsKKyAgICB9OworICAgIGNvbnN0IFBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBj
b25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIG9wZXJhdGluZ0RhdGVzKCkgY29uc3QgeyByZXR1
cm4gbV9vcGVyYXRpbmdEYXRlczsgfQorICAgIHZvaWQgY2xlYXJPcGVyYXRpbmdEYXRlcygpIHsg
bV9vcGVyYXRpbmdEYXRlcy5jbGVhcigpOyB9CisgICAgV2FsbFRpbWUmIGVuZE9mR3JhbmRmYXRo
ZXJpbmdUaW1lc3RhbXAoKSB7IHJldHVybiBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7
IH0KKyAgICBjb25zdCBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQorICAgIHZvaWQg
c2V0RW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcChjb25zdCBXYWxsVGltZSYgZ3JhbmRmYXRo
ZXJpbmdUaW1lKSB7IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IGdyYW5kZmF0aGVy
aW5nVGltZTsgfQorICAgIHZvaWQgY2xlYXJFbmRPZkdyYW5kZmF0aGVyaW5nVGltZVN0YW1wKCkg
eyBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAgPSB7IH07IH0KKyAgICBjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZTsgfQorICAgIGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkgY29uc3QgeyByZXR1cm4g
bV9kZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlOyB9CisgICAgYm9vbCBkZWJ1Z0xvZ2dpbmdF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkOyB9OworICAgIGJv
b2wgZGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsg
fQorICAgIGJvb2wgc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQ7IH0KKworICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgbWF4TnVtYmVyT2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1
MCB9OworCitwcml2YXRlOgorICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVk
KGJvb2wgZW5hYmxlZCkgeyBtX3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCAgPSBlbmFibGVk
OyB9CisgICAgYm9vbCBzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OworICAgIHZvaWQg
c2V0RGVidWdMb2dnZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVidWdMb2dnaW5nRW5h
YmxlZCAgPSBlbmFibGVkOyB9CisgICAgdm9pZCBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChi
b29sKTsKKyAgICB2b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJik7CisgICAgdm9pZCBzZXRDYWNoZU1heEFnZUNhcChTZWNvbmRzKTsKKyAgICB2b2lkIHVw
ZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdm9pZCBzZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29v
a2llcyhTZWNvbmRzKTsKKyAgICB2b2lkIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCk7
CisKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIG1fc3RvcmU7CisgICAgUmVm
PFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CisjaWYgSEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSBtX3Jlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyOworI2Vsc2UKKyAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
ZmllciBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOworI2VuZGlmCisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgSGFzaFNldDx1aW50NjRfdD4gbV9hY3RpdmVQ
bHVnaW5Ub2tlbnM7CisjZW5kaWYKKyAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKKyAgICBW
ZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsKKyAgICBXYWxsVGltZSBtX2Vu
ZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7CisgICAgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlOworICAgIE1vbm90b25pY1RpbWUgbV9sYXN0VGltZURh
dGFSZWNvcmRzV2VyZVJlbW92ZWQ7CisgICAgdWludDY0X3QgbV9sYXN0U3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0SWRlbnRpZmllciB7IDAgfTsKKyAgICBPcHRpb25hbDx1aW50NjRfdD4gbV9w
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcjsKKyAgICBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UgeyBVUkwgeyBV
UkwoKSwgImh0dHBzOi8vM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyJfcyB9IH07CisgICAgYm9vbCBt
X2RlYnVnTG9nZ2luZ0VuYWJsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFi
bGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5ZjdlOGYwYTIw
ZGFmZWE5YWIyOWU2MDcwNzhlZjE1N2ZiMmJiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlQ29jb2EubW0KQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKworI2lm
IEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCisKKyNpbXBvcnQgPFdlYkNvcmUvUmVn
aXN0cmFibGVEb21haW4uaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlZ2lzdGVyVXNlckRlZmF1bHRzSWZOZWVk
ZWQoKQoreworICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3QgaW5pdE9uY2U7CisKKyAgICBkaXNw
YXRjaF9vbmNlKCZpbml0T25jZSwgXnsKKyAgICAgICAgU2Vjb25kcyB0aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZv
cktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uIl0p
OworICAgICAgICBpZiAodGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA+IDBfcyAmJiB0aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uIDw9IDI0X2ggKiAzMCkKKyAgICAgICAgICAgIHNldFRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24odGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik7CisKKyAgICAgICAg
U2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoW1tOU1VzZXJEZWZh
dWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCJdKTsKKyAgICAgICAg
aWYgKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA+IDBfcyAmJiBtaW5pbXVt
VGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPCAxX2gpCisgICAgICAgICAgICBzZXRNaW5p
bXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJl
Y29yZHNSZW1vdmFsKTsKKworICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5nVGltZShbW05T
VXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIl0pOworICAgICAgICBpZiAoZ3JhbmRm
YXRoZXJpbmdUaW1lID4gMF9zICYmIGdyYW5kZmF0aGVyaW5nVGltZSA8PSAyNF9oICogNykKKyAg
ICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5nVGltZShncmFuZGZhdGhlcmluZ1RpbWUpOworCisg
ICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkl0cERlYnVnTW9kZSJdKTsKKyAg
ICAgICAgYXV0byogZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIkl0cE1hbnVhbFByZXZhbGVu
dFJlc291cmNlIl07CisgICAgICAgIGlmIChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKSB7
CisgICAgICAgICAgICBVUkwgdXJsIHsgVVJMKCksIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UgfTsKKyAgICAgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoImh0dHA6Ly8iKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChkZWJ1Z01h
bnVhbFByZXZhbGVudFJlc291cmNlKTsKKyAgICAgICAgICAgICAgICB1cmwgPSB7IFVSTCgpLCBi
dWlsZGVyLnRvU3RyaW5nKCkgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh1cmwu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKFJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0pOworICAgICAgICB9CisKKyAgICAgICAgU2Vj
b25kcyBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2FjaGVNYXhBZ2VDYXAiXSk7CisgICAgICAgIGlmIChjYWNoZU1heEFnZUNhcEZvclByZXZh
bGVudFJlc291cmNlcyA+IDBfcyAmJiBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNl
cyA8PSAyNF9oICogMzY1KQorICAgICAgICAgICAgc2V0Q2FjaGVNYXhBZ2VDYXAoY2FjaGVNYXhB
Z2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOworICAgICAgICAKKyAgICAgICAgU2Vjb25kcyBj
bGllbnRTaWRlQ29va2llc0FnZUNhcChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXAiXSk7CisgICAgICAgIGlmIChjbGllbnRTaWRlQ29va2llc0FnZUNhcCA+IDBfcyAm
JiBjbGllbnRTaWRlQ29va2llc0FnZUNhcCA8PSAyNF9oICogMzY1KQorICAgICAgICAgICAgc2V0
QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXApOworICAg
IH0pOworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmNwcAppbmRleCA2NTVkMTFlOWI1YzZjYWRhN2M5YjUyNTM2OWM0ZmU1Y2E4
NDJmZGYwLi4zNzEzZjliMTcxYzFiNTE5ODA5NzcyZjFiMDkyMWIxNTI3Yjc5MTZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5o
IgogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UuaCIKICNpbmNsdWRlICJTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCIKQEAg
LTQ4LDYgKzQ5LDkgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFzZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CiAjaW5jbHVkZSA8d3RmL0Nh
bGxiYWNrQWdncmVnYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Dcm9zc1RocmVhZENvcGllci5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtODYsOCArOTAsOCBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29y
ZHNXZXJlU2Nhbm5lZChibwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBw
b3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVT
Y2FubmVkKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAg
ICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQodmFsdWUpOwogICAgIH0pOwogfQogCkBAIC05Niw5ICsxMDAsOSBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZChibwogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAg
cG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2Vy
ZVNjYW5uZWQodmFsdWUpOwotICAgICAgICAKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3Jl
KQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFS
ZWNvcmRzV2VyZVNjYW5uZWQodmFsdWUpOworCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMTA4LDggKzExMiw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUp
Ci0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRDbGFzc2lmeVJlc291cmNlc0Jl
Zm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NT
dG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTaG91bGRDbGFzc2lmeVJl
c291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCh2YWx1ZSk7CiAKICAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC0xMjAsOCAr
MTI0LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1
Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBwb3N0VGFzayhbdGhpcywgdmFsdWVdIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnko
dmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KHZhbHVlKTsKICAgICB9KTsK
IH0KIApAQCAtMTQxLDEzICsxNDUsMjIgQEAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoTmV0d29ya1Nlc3Npb24mIG4KICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCByZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5ID0gcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeS5pc29sYXRlZENvcHkoKV0gewotICAgICAgICBtX21lbW9yeVN0b3JlID0gc3RkOjptYWtl
X3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRp
c3RpY3NRdWV1ZSk7Ci0gICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4oKm1fbWVtb3J5U3Rv
cmUsIG1fc3RhdGlzdGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsK
KyAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKSkgeworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUgPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqdGhp
cywgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOwor
CisgICAgICAgICAgICBhdXRvIG1lbW9yeVN0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0YXRpc3RpY3NRdWV1ZSk7Cisg
ICAgICAgICAgICBhdXRvIHBlcnNpc3RlbnRTdG9yZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbWVtb3J5U3RvcmUsIG1fc3RhdGlz
dGljc1F1ZXVlLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KTsKKworICAgICAgICAg
ICAgZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRp
c3RpY3NTdG9yZS5nZXQoKSkucG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoKm1lbW9yeVN0b3JlKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCp0aGlzLCBtX3N0
YXRpc3RpY3NRdWV1ZSk7CisgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+KGRvd25j
YXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3Jl
KSwgbV9zdGF0aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOwor
ICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUUoMTkzMjk3KTogVGhpcyBzaG91bGQgYmUgcmV2
aXNlZCBhZnRlciB0aGUgVUlQcm9jZXNzIHZlcnNpb24gZ29lcyBhd2F5LgotICAgICAgICBtX21l
bW9yeVN0b3JlLT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOworICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKICAgICB9KTsKLSAgICAKKwogICAg
IG1fZGFpbHlUYXNrc1RpbWVyLnN0YXJ0UmVwZWF0aW5nKDI0X2gpOwogfQogCkBAIC0xNzYsNyAr
MTg5LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5kRGVz
dHJveVBlcnNpc3RlbnRTdG9yZSgpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
IAotICAgIGlmICghbV9wZXJzaXN0ZW50U3RvcmFnZSAmJiAhbV9tZW1vcnlTdG9yZSkKKyAgICBp
ZiAoIW1fcGVyc2lzdGVudFN0b3JhZ2UgJiYgIW1fc3RhdGlzdGljc1N0b3JlKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgZGVzdHJveSB0aGUgcGVyc2lzdGVudCBzdG9y
ZSBvbiB0aGUgYmFja2dyb3VuZCBxdWV1ZSBhbmQgd2FpdCBmb3IgaXQgdG8gZGllCkBAIC0xODYs
NyArMTk5LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmZsdXNoQW5k
RGVzdHJveVBlcnNpc3RlbnRTdG9yZSgpCiAgICAgQmluYXJ5U2VtYXBob3JlIHNlbWFwaG9yZTsK
ICAgICBtX3N0YXRpc3RpY3NRdWV1ZS0+ZGlzcGF0Y2goWyZzZW1hcGhvcmUsIHRoaXNdIHsKICAg
ICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IG51bGxwdHI7Ci0gICAgICAgIG1fbWVtb3J5U3Rv
cmUgPSBudWxscHRyOworICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZSA9IG51bGxwdHI7CiAgICAg
ICAgIHNlbWFwaG9yZS5zaWduYWwoKTsKICAgICB9KTsKICAgICBzZW1hcGhvcmUud2FpdCgpOwpA
QCAtMTk3LDggKzIxMCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKGJvb2wgdmFsCiAgICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCB2YWx1ZSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlz
dGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTIwOCw4ICsyMjEsOCBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2VG
b3JEZWJ1Z01vZGUoY29uc3QgUmVnaQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5zZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZShkb21haW4pOworICAgICAgICBpZiAo
bV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0UHJl
dmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBs
eShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0yMTksOCArMjMy
LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlU3RhdGlz
dGljc0FuZERhdGFSZWNvcmRzUHJvY2Vzc2luZygKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlT
dG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHMoKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7
CiB9CkBAIC0yMzgsMTcgKzI1MSwxOSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6cmVzb3VyY2VMb2FkU3RhdGlzdGljc1VwZGF0ZWQoVmVjdG9yPFdlYkNvcgogICAgIC8v
IGNvbWluZyBmcm9tIElQQy4gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBvbmx5IGNvbnRhaW5zIHN0
cmluZ3Mgd2hpY2ggYXJlIHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcKICAg
ICAvLyBhcyBub2JvZHkgb24gdGhpcyB0aHJlYWQgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhvc2Ug
c3RyaW5ncy4KICAgICBwb3N0VGFzayhbdGhpcywgb3JpZ2lucyA9IFdURk1vdmUob3JpZ2lucyld
KCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKCFt
X3N0YXRpc3RpY3NTdG9yZSB8fCAhaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3Jl
PigqbV9zdGF0aXN0aWNzU3RvcmUpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1f
bWVtb3J5U3RvcmUtPm1lcmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKKyAgICAgICAg
YXV0byYgbWVtb3J5U3RvcmUgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7CisgICAgCisgICAgICAgIG1lbW9yeVN0b3JlLm1l
cmdlU3RhdGlzdGljcyhXVEZNb3ZlKG9yaWdpbnMpKTsKIAogICAgICAgICAvLyBXZSBjYW4gY2Fu
Y2VsIGFueSBwZW5kaW5nIHJlcXVlc3QgdG8gcHJvY2VzcyBzdGF0aXN0aWNzIHNpbmNlIHdlJ3Jl
IGRvaW5nIGl0IHN5bmNocm9ub3VzbHkgYmVsb3cuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmNh
bmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3QoKTsKKyAgICAgICAgbWVtb3J5
U3RvcmUuY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOwogCiAgICAg
ICAgIC8vIEZpcmUgYmVmb3JlIHByb2Nlc3Npbmcgc3RhdGlzdGljcyB0byBwcm9wYWdhdGUgdXNl
ciBpbnRlcmFjdGlvbiBhcyBmYXN0IGFzIHBvc3NpYmxlIHRvIHRoZSBuZXR3b3JrIHByb2Nlc3Mu
Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsK
LSAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcygp
OworICAgICAgICBtZW1vcnlTdG9yZS51cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7Cisg
ICAgICAgIG1lbW9yeVN0b3JlLnByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKICAg
ICB9KTsKIH0KIApAQCAtMjU4LDE3ICsyNzMsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHMK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1
YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9t
YWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNz
U3RvcmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aGFzU3RvcmFnZUFjY2Vz
cyhzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgaGFzU3RvcmFn
ZUFjY2VzcykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBoYXNTdG9yYWdlQWNjZXNzXSgp
IG11dGFibGUgewotICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VB
Y2Nlc3MpOworCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgeworICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPmhhc1N0b3JhZ2VBY2Nlc3Moc3ViRnJhbWVEb21haW4sIHRvcEZy
YW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShib29sIGhhc1N0b3JhZ2VBY2Nlc3MpIG11dGFibGUgeworICAg
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGhhc1N0b3JhZ2VBY2Nlc3MpOworICAgICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICB9CiAg
ICAgfSk7CiB9CiAKQEAgLTMyNSwxOCArMzQzLDIwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFp
CiAgICAgfQogCiAgICAgcG9zdFRhc2soW3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVE
b21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUpIHsK
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fubm90UmVxdWVzdEFjY2Vzcyk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1f
bWVtb3J5U3RvcmUtPnJlcXVlc3RTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4p
LCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIHByb21w
dEVuYWJsZWQsIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XShTdG9yYWdlQWNjZXNzU3RhdHVzIHN0YXR1cykgbXV0YWJsZSB7Ci0gICAgICAgICAgICBwb3N0
VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBzdGF0dXNdKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
c3RhdHVzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBt
X3N0YXRpc3RpY3NTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURv
bWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwg
cHJvbXB0RW5hYmxlZCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKFN0b3JhZ2VBY2Nlc3NTdGF0dXMgc3RhdHVzKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBzdGF0dXNdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzQ4LDggKzM2OCw4
IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1VuZGVyT3BlbmVyKFJlZ2lzdHJhYmxlCiAgICAgLy8gY29taW5nIGZyb20gSVBDLiBTdHJp
bmdzIHdoaWNoIGFyZSBzYWZlIHRvIG1vdmUgdG8gb3RoZXIgdGhyZWFkcyBhcyBsb25nIGFzIG5v
Ym9keSBvbiB0aGlzIHRocmVhZCBob2xkcyBhIHJlZmVyZW5jZQogICAgIC8vIHRvIHRob3NlIHN0
cmluZ3MuCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyA9
IFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFnZUlELCBvcGVu
ZXJEb21haW4gPSBXVEZNb3ZlKG9wZW5lckRvbWFpbildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVxdWVzdFN0b3Jh
Z2VBY2Nlc3NVbmRlck9wZW5lcihXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyks
IG9wZW5lclBhZ2VJRCwgV1RGTW92ZShvcGVuZXJEb21haW4pKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnJlcXVlc3RTdG9y
YWdlQWNjZXNzVW5kZXJPcGVuZXIoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3Mp
LCBvcGVuZXJQYWdlSUQsIFdURk1vdmUob3BlbmVyRG9tYWluKSk7CiAgICAgfSk7CiB9CiAKQEAg
LTM1NywxOCArMzc3LDIwIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpn
cmFudFN0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21haW4g
PSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFt
ZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWRO
b3csIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3Rh
dGlzdGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Z3JhbnRT
dG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9t
YWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3csIFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdhc0dyYW50ZWRBY2Nlc3Mp
IG11dGFibGUgewotICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10oKSBtdXRhYmxl
IHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzKTsK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+Z3JhbnRTdG9yYWdlQWNjZXNzKFdURk1vdmUoc3ViRnJhbWVEb21haW4pLCBXVEZN
b3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1c2VyV2FzUHJvbXB0ZWROb3cs
IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShib29sIHdh
c0dyYW50ZWRBY2Nlc3MpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHdhc0dyYW50
ZWRBY2Nlc3NdKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHdhc0dyYW50ZWRBY2Nlc3MpOworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0pOworICAgICAgICB9CiAgICAgfSk7CiB9CiAKQEAgLTM5Nyw5ICs0MTks
OSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29y
a1Byb2Nlc3MoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCisgICAgICAgIGlmICghbV9z
dGF0aXN0aWNzU3RvcmUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fbWVtb3J5U3Rv
cmUtPmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG1fc3RhdGlzdGljc1N0b3Jl
LT5kaWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIH0pOwogfQogCkBAIC00MjMsMTEgKzQ0
NSwxMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cGVyZm9ybURhaWx5
VGFza3MoKQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhb
dGhpc10gewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkoKTsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVs
ZW1ldHJ5KCk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkgeworICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCk7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2FsY3VsYXRlQW5kU3VibWl0VGVs
ZW1ldHJ5KCk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtNDM2LDggKzQ1Nyw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzdWJtaXRUZWxlbWV0cnkoQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZCgpPiYmCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAog
ICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAg
ICAgICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRT
dWJtaXQoKm1fbWVtb3J5U3RvcmUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUgJiYg
aXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUp
KQorICAgICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRyeTo6Y2FsY3Vs
YXRlQW5kU3VibWl0KGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4o
Km1fc3RhdGlzdGljc1N0b3JlKSk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC00NzYsMjcgKzQ5NywyNiBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFdl
YkZyYW1lUHJveHkmIGZyYQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkK
IHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWluID0gdGFyZ2V0RG9tYWluLmlzb2xh
dGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgp
LCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGlzUmVkaXJlY3Qs
IGlzTWFpbkZyYW1lXSB7Ci0KLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5sb2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0RG9tYWluLCB0b3BGcmFt
ZURvbWFpbiwgc291cmNlRG9tYWluLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CisgICAgICAg
IGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5s
b2dGcmFtZU5hdmlnYXRpb24odGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgc291cmNlRG9t
YWluLCBpc1JlZGlyZWN0LCBpc01haW5GcmFtZSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dXZWJTb2NrZXRMb2FkaW5nKGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BG
cmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWlu
ID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmco
dGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nU3VicmVz
b3VyY2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsKIAog
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291
cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJl
c291cmNlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFt
ZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgdGFyZ2V0RG9tYWluID0g
dGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9t
YWluLmlzb2xhdGVkQ29weSgpLCBsYXN0U2VlbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3Rv
cmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmcodGFy
Z2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOworICAgICAgICBpZiAobV9zdGF0
aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+bG9nU3VicmVzb3Vy
Y2VMb2FkaW5nKHRhcmdldERvbWFpbiwgdG9wRnJhbWVEb21haW4sIGxhc3RTZWVuKTsKIAogICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsK
QEAgLTUwNSw5ICs1MjUsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
bG9nU3VicmVzb3VyY2VMb2FkaW5nKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYQogdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRh
cmdldERvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewogICAgIHBvc3RUYXNrKFt0aGlzLCBzb3VyY2VEb21haW4gPSBzb3VyY2VEb21haW4uaXNv
bGF0ZWRDb3B5KCksIHRhcmdldERvbWFpbiA9IHRhcmdldERvbWFpbi5pc29sYXRlZENvcHkoKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3Jl
LT5sb2dTdWJyZXNvdXJjZVJlZGlyZWN0KHNvdXJjZURvbWFpbiwgdGFyZ2V0RG9tYWluKTsKLQor
ICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NT
dG9yZS0+bG9nU3VicmVzb3VyY2VSZWRpcmVjdChzb3VyY2VEb21haW4sIHRhcmdldERvbWFpbik7
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQpAQCAtNTE3LDggKzUzNiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4g
PSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQot
ICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+bG9nVXNlckludGVyYWN0aW9uKGRvbWFpbik7Cisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5sb2dVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01MjgsOCArNTQ3LDgg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0
aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5
KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3RhdGlz
dGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmNsZWFyVXNlckludGVy
YWN0aW9uKGRvbWFpbik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNTM3LDcgKzU1Niw3IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3Ry
YWJsZURvbWFpCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aGFzSGFkVXNl
ckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpbiwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX21l
bW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aGFzSGFkVXNlckludGVyYWN0aW9uKGRvbWFpbikg
OiBmYWxzZTsKKyAgICAgICAgYm9vbCBoYWRVc2VySW50ZXJhY3Rpb24gPSBtX3N0YXRpc3RpY3NT
dG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluKSA6
IGZhbHNlOwogICAgICAgICBwb3N0VGFza1JlcGx5KFtoYWRVc2VySW50ZXJhY3Rpb24sIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihoYWRVc2VySW50ZXJhY3Rpb24pOwogICAgICAg
ICB9KTsKQEAgLTU0OSw4ICs1NjgsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbgogICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFp
biA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRMYXN0U2Vlbihkb21haW4s
IHNlY29uZHMpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBt
X3N0YXRpc3RpY3NTdG9yZS0+c2V0TGFzdFNlZW4oZG9tYWluLCBzZWNvbmRzKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBA
IC01NjAsOCArNTc5LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5zZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBp
ZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0
UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC01NzEsOCArNTkwLDggQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZUQKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAg
ICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRW
ZXJ5UHJldmFsZW50UmVzb3VyY2UoZG9tYWluKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0
b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFZlcnlQcmV2YWxlbnRSZXNv
dXJjZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTU4Miw3ICs2MDEsNyBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoQ29tcGxldGlv
bkhhbmRsZQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhb
dGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9y
eVN0b3JlLT5kdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcygpIDogZW1wdHlTdHJpbmcoKTsKKyAg
ICAgICAgU3RyaW5nIHJlc3VsdCA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0aXN0aWNzU3Rv
cmUtPmR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBlbXB0eVN0cmluZygpOwogICAgICAg
ICBwb3N0VGFza1JlcGx5KFtyZXN1bHQgPSByZXN1bHQuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwogICAgICAgICB9KTsKQEAgLTU5NCw3
ICs2MTMsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbgogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29s
YXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlID0gbV9tZW1v
cnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZh
bHNlOworICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX3N0YXRpc3RpY3NTdG9y
ZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1ByZXZhbGVudFJlc291cmNlKGRvbWFpbikgOiBmYWxz
ZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNQcmV2YWxlbnRSZXNvdXJjZSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICB9
KTsKQEAgLTYwNiw3ICs2MjUsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEbwogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9
IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZSA9IG1fbWVtb3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1ZlcnlQcmV2YWxlbnRS
ZXNvdXJjZShkb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNWZXJ5UHJldmFsZW50UmVz
b3VyY2UgPSBtX3N0YXRpc3RpY3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lz
VmVyeVByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOwogICAgICAgICB9KTsKQEAgLTYxOCw3ICs2MzcsOCBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJy
ZXNvdXJjZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNvdXJjZURv
bWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFpbikgOiBmYWxzZTsKKyAg
ICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIgPSBtX3N0YXRpc3RpY3NT
dG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
c3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKQorICAgICAgICAgICAgOiBmYWxzZTsK
ICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJjZVVuZGVyLCBj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKTsKICAgICAgICAgfSk7CkBAIC02MzAsNyArNjUwLDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBS
ZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2so
W3RoaXMsIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRv
cEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVt
b3J5U3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihzdWJGcmFtZURvbWFpbiwgdG9w
RnJhbWVEb21haW4pIDogZmFsc2U7CisgICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNSZWdpc3Rl
cmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbikKKyAgICAg
ICAgICAgIDogZmFsc2U7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2lzUmVnaXN0ZXJlZEFzU3Vi
RnJhbWVVbmRlciwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGlzUmVnaXN0ZXJl
ZEFzU3ViRnJhbWVVbmRlcik7CiAgICAgICAgIH0pOwpAQCAtNjQyLDcgKzY2Myw4IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5n
VG8oY29uc3QgUmVnaXN0cmFiCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAg
IHBvc3RUYXNrKFt0aGlzLCBkb21haW5SZWRpcmVjdGVkRnJvbSA9IGRvbWFpblJlZGlyZWN0ZWRG
cm9tLmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVjdGVk
VG8uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzUmVnaXN0ZXJlZEFzUmVk
aXJlY3RpbmdUbyhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRvKSA6IGZh
bHNlOworICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyA9IG1fc3RhdGlz
dGljc1N0b3JlID8gbV9zdGF0aXN0aWNzU3RvcmUtPmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdU
byhkb21haW5SZWRpcmVjdGVkRnJvbSwgZG9tYWluUmVkaXJlY3RlZFRvKQorICAgICAgICAgICAg
OiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGlu
Z1RvLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNSZWRp
cmVjdGluZ1RvKTsKICAgICAgICAgfSk7CkBAIC02NTQsOCArNjc2LDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb20KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBv
c3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21haW4uaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAg
IGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2xlYXJQcmV2
YWxlbnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisg
ICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShkb21h
aW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICB9KTsKIH0KQEAgLTY2NSw4ICs2ODcsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZAog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9t
YWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCB2YWx1ZSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFuZGZhdGhlcmVkKGRv
bWFpbiwgdmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAg
ICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJlZChkb21haW4sIHZhbHVlKTsKICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7
CiB9CkBAIC02NzYsNyArNjk4LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmlzR3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG8KICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGRvbWFpbiA9IGRvbWFpbi5pc29s
YXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQgPSBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNHcmFuZGZhdGhlcmVkKGRvbWFpbikgOiBm
YWxzZTsKKyAgICAgICAgYm9vbCBpc0dyYW5kRmF0aGVyZWQgPSBtX3N0YXRpc3RpY3NTdG9yZSA/
IG1fc3RhdGlzdGljc1N0b3JlLT5pc0dyYW5kZmF0aGVyZWQoZG9tYWluKQorICAgICAgICAgICAg
OiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNHcmFuZEZhdGhlcmVkLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNHcmFuZEZhdGhlcmVkKTsKICAgICAgICAgfSk7
CkBAIC02ODgsOCArNzExLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3QKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdWJGcmFtZURvbWFpbiA9IHN1
YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9t
YWluLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBpZiAobV9zdGF0
aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbik7CiAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwog
fQpAQCAtNjk5LDggKzcyMiw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgUmVnCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21haW4g
PSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BG
cmFtZURvbWFpbi5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW4oc3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKTsKKyAgICAg
ICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUt
PnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbiwgdG9w
RnJhbWVEb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTcxMCw4ICs3MzMsOCBAQCB2b2lkIFdlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRh
c2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHN1YnJlc291cmNlRG9tYWluID0gc3VicmVzb3VyY2VEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRv
bWFpblJlZGlyZWN0ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRlZENvcHkoKV0oKSBt
dXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9y
eVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oc3VicmVzb3VyY2VEb21haW4s
IGRvbWFpblJlZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAg
ICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
VG8oc3VicmVzb3VyY2VEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNzIx
LDggKzc0NCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3VyY2VEb21haW4gPSBzdWJyZXNv
dXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJlY3RlZEZyb20gPSBkb21haW5S
ZWRpcmVjdGVkRnJvbS5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1f
bWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0RnJvbShzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZEZyb20p
OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oc3VicmVzb3VyY2VEb21h
aW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC03MzIsOCArNzU1LDggQEAgdm9p
ZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBSZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBkb21haW5SZWRpcmVjdGVkVG8gPSBkb21haW5SZWRpcmVjdGVkVG8uaXNvbGF0ZWRDb3B5
KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKHRvcEZyYW1lRG9tYWlu
LCBkb21haW5SZWRpcmVjdGVkVG8pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisg
ICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRv
KHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkVG8pOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTc0Myw4ICs3
NjYsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUmVnaXN0cgogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4u
aXNvbGF0ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVkaXJlY3RlZEZy
b20uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKKyAgICAgICAgaWYgKG1f
c3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFRvcEZy
YW1lVW5pcXVlUmVkaXJlY3RGcm9tKHRvcEZyYW1lRG9tYWluLCBkb21haW5SZWRpcmVjdGVkRnJv
bSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtNzU1LDEzICs3NzgsMTcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGUoQ29tcGxldGlvbkhhbmQK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3RhdGlzdGlj
c1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX21lbW9y
eVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKworICAgICAgICBhdXRvIGNhbGxiYWNr
QWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsK
KyAgICAgICAgCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1f
c3RhdGlzdGljc1N0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZyhbY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwogICAgIH0pOwogfQogCkBA
IC03NzAsMTQgKzc5NywxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZUZvckRvbWFpbnMoY29ucwogICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB1c2VkIGJ5IHRlc3Rpbmcgc3lzdGVtLiBTaG91bGQgb25seSBiZSBjYWxsZWQg
ZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICBwb3N0VGFzayhbdGhpcywgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlu
c1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYg
KCFtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBtX21lbW9yeVN0b3JlLT51cGRhdGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoZG9t
YWluc1RvQmxvY2ssIFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgeworICAgICAgICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxi
YWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+dXBkYXRlQ29v
a2llQmxvY2tpbmdGb3JEb21haW5zKGRvbWFpbnNUb0Jsb2NrLCBbY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0oKSB7IH0pOwogICAgIH0pOwogfQogCkBA
IC03ODYsMTQgKzgxNiwxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
c2NoZWR1bGVDbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGNvbnN0CiAgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBm
cm9tIHRoZSBtYWluIHRocmVhZC4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAg
IHBvc3RUYXNrKFt0aGlzLCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NT
dG9yZSkgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21lbW9y
eVN0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAg
ICBhdXRvIGNhbGxiYWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgICAgICB9KTsKKworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyhkb21h
aW5zLCBbY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0o
KSB7IH0pOwogICAgIH0pOwogfQogCkBAIC04MDQsMjIgKzgzNywyNyBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVu
dChTaG91bGRHcgogICAgICAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkKICAgICAgICAgICAg
IG1fcGVyc2lzdGVudFN0b3JhZ2UtPmNsZWFyKCk7CiAKLSAgICAgICAgQ29tcGxldGlvbkhhbmRs
ZXJDYWxsaW5nU2NvcGUgY29tcGxldGlvbkhhbmRsZXJDYWxsZXIoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICgh
bV9zdGF0aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9
PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBiZWluZyBj
bGVhcmVkLCBtX3N0YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0
aGVyIGRhdGEuIik7CisKKyAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXV0byBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBDYWxsYmFja0FnZ3JlZ2F0b3I6OmNyZWF0ZShbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpIHsKLSAgICAgICAgICAg
IG1fbWVtb3J5U3RvcmUtPmNsZWFyKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhp
cy5jb3B5UmVmKCksIHNob3VsZEdyYW5kZmF0aGVyLCBjb21wbGV0aW9uSGFuZGxlckNhbGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXJDYWxsZXIpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAg
aWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+
Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgc2hv
dWxkR3JhbmRmYXRoZXIsIGNhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5j
b3B5UmVmKCldICgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZh
dGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykgewotICAgICAgICAgICAg
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVt
b3J5U3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShjb21wbGV0aW9uSGFuZGxl
ckNhbGxlci5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Z3JhbmRm
YXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBXVEZNb3ZlKGNh
bGxiYWNrQWdncmVnYXRvcildKCkgbXV0YWJsZSB7IH0pOwogICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5N
ZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5nIGNsZWFyZWQsIG1fbWVtb3J5U3RvcmUgaXMg
bnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhlciBkYXRhLiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBB
ZnRlciBiZWluZyBjbGVhcmVkLCBtX3N0YXRpc3RpY3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5n
IHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2hvdWxkR3JhbmRmYXRoZXIg
PT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpCi0gICAgICAgICAgICAgICAgUkVM
RUFTRV9MT0coUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBCZWZvcmUgYmVpbmcg
Y2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVy
IGRhdGEuIik7CiAgICAgICAgIH0KICAgICB9KTsKIH0KQEAgLTgzNyw4ICs4NzUsOCBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFj
dGlvbihTZWNvbmRzIHNlY29uZAogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgcG9zdFRhc2soW3RoaXMsIHNlY29uZHMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3Jl
KQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlv
bihzZWNvbmRzKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPnNldFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24oc2Vjb25kcyk7
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwogfQpAQCAtODQ3LDggKzg4NSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoU2VjCiB7CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25k
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMpOwor
ICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NT
dG9yZS0+c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKHNlY29uZHMpOwog
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwpAQCAtODU4LDggKzg5Niw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpzZXRHcmFuZGZhdGhlcmluZ1RpbWUoU2Vjb25kcyBzZWNvbmRzLCBDb21wCiB7CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFzayhbdGhpcywgc2Vjb25kcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxl
ICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+c2V0R3JhbmRmYXRoZXJpbmdUaW1lKHNlY29uZHMpOworICAgICAgICBpZiAobV9zdGF0aXN0
aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0R3JhbmRmYXRoZXJp
bmdUaW1lKHNlY29uZHMpOwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtOTAzLDggKzk0MSw4IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4
aW11bUVudHJ5CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFz
ayhbdGhpcywgbWF4aW11bUVudHJ5Q291bnQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1h
eGltdW1FbnRyeUNvdW50KTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAg
ICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKG1heGltdW1F
bnRyeUNvdW50KTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKQEAgLTkxNSw4ICs5NTMsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdl
dENvdQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhp
cywgcHJ1bmVUYXJnZXRDb3VudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFyZ2V0
Q291bnQpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+c2V0UHJ1bmVFbnRyaWVzRG93blRvKHBydW5lVGFyZ2V0Q291bnQpOwog
CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAg
IH0pOwpAQCAtOTI3LDggKzk2NSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoQ29tcGxldGlvbkhhCiAgICAgQVNT
RVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnJlc2V0UGFy
YW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+cmVzZXRQYXJhbWV0ZXJzVG9EZWZhdWx0
VmFsdWVzKCk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmgKaW5kZXggMDYzNDM4NWMxMGIzMjQxODQxMjg4ZmY4NDE5MWQ5MjgyNTk4YjhkMS4uMGEx
YTMwM2NkZjg2NTMyNmQyODFjOTE1YmJmNDJkZmRjNWY3ZWU1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9X
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaApAQCAtNTIsNyArNTIsNyBAQCBlbnVtIGNs
YXNzIFNob3VsZFNhbXBsZSA6IGJvb2w7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgTmV0
d29ya1Nlc3Npb247Ci1jbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU7Citj
bGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU7CiBjbGFzcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U7CiBjbGFzcyBXZWJGcmFtZVByb3h5OwogY2xhc3MgV2Vi
UHJvY2Vzc1Byb3h5OwpAQCAtMTg5LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAKICAgICBXZWFrUHRy
PE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9uOwogICAgIFJlZjxXb3JrUXVldWU+IG1f
c3RhdGlzdGljc1F1ZXVlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU+IG1fbWVtb3J5U3RvcmU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZT4gbV9zdGF0aXN0aWNzU3RvcmU7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4gbV9wZXJzaXN0
ZW50U3RvcmFnZTsKIAogICAgIFJ1bkxvb3A6OlRpbWVyPFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZT4gbV9kYWlseVRhc2tzVGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDU1Y2JhYjg2NGZlZWI5Y2NlODM0YjRmYWRk
OWM0MDAyM2I0YjkyMjAuLmZmNDAyYmQyOTg5YzZkZTUzYWQ3NGM5NGU4NGRkNTE5NGRjZGVjZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CkBAIC03Miw2ICs3Miw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Np
b24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY2hlbWVSZWdpc3RyeS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8d3Rm
L0FsZ29yaXRobXMuaD4KQEAgLTMwOSw2ICszMTAsOCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpp
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
JgogICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbikKICAg
ICAgICAgc3dpdGNoVG9OZXdUZXN0aW5nU2Vzc2lvbigpOwogCisgICAgV2ViQ29yZTo6UnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRJVFBEYXRhYmFzZUVuYWJsZWQo
cGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSk7CisKICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1l
dGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAKICAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMu
ZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNlc3Np
b25JRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKaW5kZXggYzZkZjA4ZTlmYjc3
NjZmNzcwYWZhZGVmMWFhN2YyMTI5NDlkMWY1NS4uMDg3MTUwYTFkNTIxYTUyNGVjYmQ4YjVkOWEx
YjQ4NjNhZjE2YTUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTkz
LDYgKzkzLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2Rl
KElQQzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIp
CiAgICAgZW5jb2RlciA8PCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5IDw8IHNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUgPDwgdXJsU2No
ZW1lc1NlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlIDw8IHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2Vy
UHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXk7CiAjZW5kaWYKKyAgICBlbmNvZGVyIDw8IHNob3VsZEVu
YWJsZUlUUERhdGFiYXNlOwogfQogCiBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0
ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVycyYgcmVzdWx0KQpAQCAtMjE3LDYgKzIxOCw5IEBAIGJvb2wgTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdv
cmtQcm9jCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCmluZGV4IDJmZDNiZTlmZGVkOTgwYjc1NzNjZTNiNTE2YjA3YTk2ZmFkYWY3M2IuLmZjOTAw
YzJlZDdmMGNlZmIxODI5MGM0MGY4MDM1Y2NmZTVkOTc4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmgKQEAgLTExMSw2ICsxMTEsNyBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnMgewogICAgIFZlY3RvcjxTdHJpbmc+IHVybFNjaGVtZXNTZXJ2aWNlV29y
a2Vyc0NhbkhhbmRsZTsKICAgICBib29sIHNob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vz
c1Rlcm1pbmF0aW9uRGVsYXkgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgYm9vbCBzaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2xhc3NpZmllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCmluZGV4IGYxZWE3OTI5ZDUz
MDdmMDVkYzA2ODBmNjQ3NTRhNjlmODNlOTg1NmIuLmI0NDkyYTRkMjQ5ZmM5N2RjYThhYTNkMzIz
ZDM1Mjc5YmFmNmQ3ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00Nyw3ICs0NywxMiBAQCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NDbGFzc2lmaWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZhbAogICAgIGF1dG8gc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMuc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUby5zaXplKCk7CiAgICAgYXV0byBzdWJmcmFtZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5zdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW5zLnNpemUoKTsKICAgICBhdXRvIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dCA9IHJlc291cmNlU3RhdGlzdGljLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8uc2l6ZSgpOwot
ICAgIAorCisgICAgcmV0dXJuIGNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB0b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnQsIGN1cnJlbnRQcmV2YWxlbmNlKTsKK30KKworUmVzb3VyY2VMb2FkUHJl
dmFsZW5jZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjo6Y2FsY3VsYXRlUmVzb3Vy
Y2VQcmV2YWxlbmNlKHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3Vu
dCwgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCB1bnNpZ25lZCBz
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzVG9Db3VudCwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBjdXJyZW50UHJldmFsZW5j
ZSkKK3sKICAgICBpZiAoIXN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudAogICAg
ICAgICAmJiAhc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50CiAgICAgICAgICYmICFz
dWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5o
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmgKaW5kZXggYWNmMWYzODlkZDUxYTAwYzUxMDdkYzY3MmY5ZDNmYmE5ZjJi
ZmVmMC4uNThmNTY1YTExYTc3MzVkMDQxMjkzY2FiZjQxYzI1YmM2NTVkMTk0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyLmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTAgKzQyLDExIEBAIHB1YmxpYzoK
ICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcigpID0gZGVmYXVsdDsKICAgICB2
aXJ0dWFsIH5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcigpID0gZGVmYXVsdDsKICAg
ICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYywgUmVz
b3VyY2VMb2FkUHJldmFsZW5jZSBjdXJyZW50UHJldmFsZW5jZSk7CisgICAgUmVzb3VyY2VMb2Fk
UHJldmFsZW5jZSBjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UodW5zaWduZWQgc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3Vu
dCwgdW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNlKTsKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJv
b2wgY2xhc3NpZnkodW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50
LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1
YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkKKyAgICB2aXJ0dWFsIGJvb2wgY2xhc3Np
ZnkodW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25l
ZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjbGFzc2lmeVdp
dGhWZWN0b3JUaHJlc2hvbGQoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCBz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9y
aWdpbnNDb3VudCk7CisgICAgICAgIHJldHVybiBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hvbGQo
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c1RvQ291bnQsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCk7CiAgICAg
fQogICAgIGJvb2wgY2xhc3NpZnlXaXRoVmVjdG9yVGhyZXNob2xkKHVuc2lnbmVkLCB1bnNpZ25l
ZCwgdW5zaWduZWQpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xh
c3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmNwcCBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzQ2xhc3NpZmllckNvY29hLmNwcAppbmRleCBhY2ZiZTNjZGJjMWMzYTk1MWY3MjM3MGJk
NTk4N2U0NzJlOGQ0YzI1Li5lMWY1MzA0ZTkzMjI2ODRlYzYwNjI2YzYzMDM5NzVmMjNkMWI4YzAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2EvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lm
aWVyQ29jb2EuY3BwCkBAIC0zNSwxNSArMzUsMTUgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYTo6Y2xhc3NpZnkodW5z
aWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25lZCBzdWJy
ZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZU9yaWdpbnNDb3VudCkKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJD
b2NvYTo6Y2xhc3NpZnkodW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0Nv
dW50LCB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVk
IHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCkKIHsKICAgICBpZiAoIWNhblVzZUNv
cmVQcmVkaWN0aW9uKCkpCi0gICAgICAgIHJldHVybiBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hv
bGQoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQsIHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCk7Cisg
ICAgICAgIHJldHVybiBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hvbGQoc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQs
IHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCk7CiAKICAgICBWZWN0b3I8c3ZtX25v
ZGU+IGZlYXR1cmVzOwogCi0gICAgaWYgKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnND
b3VudCkKLSAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsxLCBzdGF0aWNfY2FzdDxkb3VibGU+KHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCl9KTsKKyAgICBpZiAoc3VicmVzb3Vy
Y2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50KQorICAgICAgICBmZWF0dXJlcy5hcHBlbmQoezEs
IHN0YXRpY19jYXN0PGRvdWJsZT4oc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50
KX0pOwogICAgIGlmIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQpCiAgICAgICAg
IGZlYXR1cmVzLmFwcGVuZCh7Miwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvQ291bnQpfSk7CiAgICAgaWYgKHN1YmZyYW1lVW5kZXJUb3BGcmFtZU9yaWdp
bnNDb3VudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2Vz
LnlhbWwgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCmluZGV4IGY1
NTg0MzI1OTBmYmRlYjY4OTc5M2UwYjQ5YjI2Nzc4NDE2N2QyZWEuLmUyYWU2YTgxMmI2NzgwYTdl
MDgwNDIyNTYxMmRjYWFiYzkyZTEwOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByZWZlcmVuY2VzLnlhbWwKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXMueWFtbApAQCAtMTM3OSw2ICsxMzc5LDE0IEBAIEl0cERlYnVnTW9kZUVuYWJsZWQ6CiAg
IGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkludGVsbGlnZW50IFRyYWNraW5nIFByZXZlbnRp
b24gRGVidWcgTW9kZSIKICAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMK
IAorSXNJVFBEYXRhYmFzZUVuYWJsZWQ6CisgIHR5cGU6IGJvb2wKKyAgZGVmYXVsdFZhbHVlOiBm
YWxzZQorICBodW1hblJlYWRhYmxlTmFtZTogIklUUCBEYXRhYmFzZSBCYWNrZW5kIgorICBodW1h
blJlYWRhYmxlRGVzY3JpcHRpb246ICJFbmFibGUgSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVu
dGlvbiBEYXRhYmFzZSBCYWNrZW5kIgorICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRG
ZWF0dXJlcworICBjYXRlZ29yeTogaW50ZXJuYWwKKwogU2VydmljZVdvcmtlcnNFbmFibGVkOgog
ICB0eXBlOiBib29sCiAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9TRVJWSUNFX1dPUktFUlNfRU5B
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKaW5kZXggNzQwN2NjMjE5MDNlMjY0Yjg4NDhjODVhNTg5NTA4NDRkM2Rk
YWM0OC4uMmVmYjhlNTk4YjZkNDdlMjE3MmViOTM1YmIyOTQ2MzBhM2NjMjIzZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0CkBAIC00Miw4ICs0MiwxMCBAQCBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU29ja2V0U3RyZWFt
LmNwcAogTmV0d29ya1Byb2Nlc3MvUGluZ0xvYWQuY3BwCiBOZXR3b3JrUHJvY2Vzcy9QcmVjb25u
ZWN0VGFzay5jcHAKIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcAogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuY3BwCitOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKIAogTmV0d29y
a1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLmNwcAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggYzQzZTRlNTA5MGJlZGM3MWM5ZGU2M2Y4NjdmNzQwYTk0MWZkMGYxMi4uYzAwZmE1
N2I5N2RhOTZmYjNkYWNjN2I0NjJkYTFkNGY0MzcxZmViZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dApAQCAtMjksNiArMjksNyBAQCBOZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrRGF0YVRhc2tD
b2NvYS5tbQogTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQogTmV0
d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Nlc3Npb25Db2NvYS5tbQogCitOZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tCiBOZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKIE5l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RlbGVtZXRy
eS5jcHAKIApAQCAtMzMyLDcgKzMzMyw2IEBAIFVJUHJvY2Vzcy9Db2NvYS9NZWRpYUNhcHR1cmVV
dGlsaXRpZXMubW0KIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KIFVJUHJvY2Vz
cy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvUGxheWJhY2tT
ZXNzaW9uTWFuYWdlclByb3h5Lm1tCi1VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9TYWZlQnJvd3NpbmdXYXJu
aW5nQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9TZXNzaW9uU3RhdGVDb2RpbmcubW0KIFVJUHJv
Y2Vzcy9Db2NvYS9TeXN0ZW1QcmV2aWV3Q29udHJvbGxlckNvY29hLm1tCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmVDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxNWJhNjI3NjY1MmUxZGY2ZmRhNGRkOGI1NzU0ZTNiZjAxYzM3NmQwLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tCisrKyAv
ZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29u
ZmlnLmgiCi0jaW1wb3J0ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCIKLQot
I2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MpCi0KLSNpbXBvcnQgPFdlYkNvcmUv
UmVnaXN0cmFibGVEb21haW4uaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
LSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdGVyVXNlckRlZmF1
bHRzSWZOZWVkZWQoKQotewotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3QgaW5pdE9uY2U7Ci0K
LSAgICBkaXNwYXRjaF9vbmNlKCZpbml0T25jZSwgXnsKLSAgICAgICAgU2Vjb25kcyB0aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNd
IGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NUaW1lVG9MaXZlVXNlckludGVy
YWN0aW9uIl0pOwotICAgICAgICBpZiAodGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA+IDBfcyAm
JiB0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uIDw9IDI0X2ggKiAzMCkKLSAgICAgICAgICAgIHNl
dFRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24odGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbik7Ci0K
LSAgICAgICAgU2Vjb25kcyBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCJdKTsK
LSAgICAgICAgaWYgKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA+IDBfcyAm
JiBtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPCAxX2gpCi0gICAgICAgICAg
ICBzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwobWluaW11bVRpbWVCZXR3
ZWVuRGF0YVJlY29yZHNSZW1vdmFsKTsKLQotICAgICAgICBTZWNvbmRzIGdyYW5kZmF0aGVyaW5n
VGltZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6
QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzR3JhbmRmYXRoZXJpbmdUaW1lIl0pOwotICAgICAgICBp
ZiAoZ3JhbmRmYXRoZXJpbmdUaW1lID4gMF9zICYmIGdyYW5kZmF0aGVyaW5nVGltZSA8PSAyNF9o
ICogNykKLSAgICAgICAgICAgIHNldEdyYW5kZmF0aGVyaW5nVGltZShncmFuZGZhdGhlcmluZ1Rp
bWUpOwotCi0gICAgICAgIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoW1tOU1Vz
ZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9vbEZvcktleTpAIkl0cERlYnVnTW9k
ZSJdKTsKLSAgICAgICAgYXV0byogZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSA9IFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHN0cmluZ0ZvcktleTpAIkl0cE1hbnVh
bFByZXZhbGVudFJlc291cmNlIl07Ci0gICAgICAgIGlmIChkZWJ1Z01hbnVhbFByZXZhbGVudFJl
c291cmNlKSB7Ci0gICAgICAgICAgICBVUkwgdXJsIHsgVVJMKCksIGRlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UgfTsKLSAgICAgICAgICAgIGlmICghdXJsLmlzVmFsaWQoKSkgewotICAgICAg
ICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZExpdGVyYWwoImh0dHA6Ly8iKTsKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZChkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKTsKLSAgICAgICAgICAgICAgICB1cmwgPSB7
IFVSTCgpLCBidWlsZGVyLnRvU3RyaW5nKCkgfTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmICh1cmwuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNl
Rm9yRGVidWdNb2RlKFJlZ2lzdHJhYmxlRG9tYWluIHsgdXJsIH0pOwotICAgICAgICB9Ci0KLSAg
ICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVudFJlc291cmNlcyhbW05TVXNl
ckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2FjaGVNYXhBZ2VDYXAiXSk7Ci0gICAgICAgIGlmIChjYWNoZU1heEFnZUNh
cEZvclByZXZhbGVudFJlc291cmNlcyA+IDBfcyAmJiBjYWNoZU1heEFnZUNhcEZvclByZXZhbGVu
dFJlc291cmNlcyA8PSAyNF9oICogMzY1KQotICAgICAgICAgICAgc2V0Q2FjaGVNYXhBZ2VDYXAo
Y2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMpOwotICAgICAgICAKLSAgICAgICAg
U2Vjb25kcyBjbGllbnRTaWRlQ29va2llc0FnZUNhcChbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xpZW50
U2lkZUNvb2tpZXNBZ2VDYXAiXSk7Ci0gICAgICAgIGlmIChjbGllbnRTaWRlQ29va2llc0FnZUNh
cCA+IDBfcyAmJiBjbGllbnRTaWRlQ29va2llc0FnZUNhcCA8PSAyNF9oICogMzY1KQotICAgICAg
ICAgICAgc2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoY2xpZW50U2lkZUNvb2tpZXNBZ2VD
YXApOwotICAgIH0pOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggOTg3NDZjMzdjNTI0
Yzg3ODRiN2E2ZTgyNjY3NjY2NTE3NWY2ZmIwZC4uYjIwN2NkNDIxMTg3ODU2MzBiOTg4ZDc4YjVh
NWJjNmVhZjVhYzU0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC0yOTYsNiArMjk2LDggQEAgdm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3ND
cmVhdGlvblBhcmEKICNpZiBFTkFCTEUoUFJPWElNSVRZX05FVFdPUktJTkcpCiAgICAgcGFyYW1l
dGVycy53aXJlbGVzc0NvbnRleHRJZGVudGlmaWVyID0gbV9jb25maWd1cmF0aW9uLT53aXJlbGVz
c0NvbnRleHRJZGVudGlmaWVyKCk7CiAjZW5kaWYKKworICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5h
YmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFi
YXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaAppbmRleCA4ODgzZjczNDU2NzY5NDRm
NDNiMzg4MDFjNWE1MWFjMDcwYjI0NWIxLi4xNmJkNWNkNTg1MTNhZmFlOWIwMDJkNjkyODI3MzIw
YTY2Nzc0OTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25h
bFBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFn
ZVByb3h5LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
ICNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVQb2xpY3lM
aXN0ZW5lclByb3h5LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKICNpbmNs
dWRlICJXZWJzaXRlUG9saWNpZXNEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDNjMjIwOTdh
Yzc5MjM4ZDFiZTEyNGZiYmRiMmEzMzVkY2JmYjE2ODEuLmY0OGYxYjE2ZTJiZTE1M2JlZWM3ZDVm
M2M5N2Y5Yzg3YTIxYTA0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKQEAgLTg2LDYgKzg2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NXYXJt
aW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1J1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNs
dWRlIDx3dGYvTGFuZ3VhZ2UuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZWRiMDU5
MzZiNTg3MWQzYTUxZjE0Yjg1NDE5YWZhYmFkZjkwYTA2Zi4uZDdlMjE5OGNiNzA5MjM5YWQzNTJm
ZDg4YWJmZDMzYjEwOWY2Yzc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNTMwLDYgKzM1MzAsOCBAQAogCQk3NUE4RDJDNTE4N0ND
RjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0
YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzYy
Qjc0ODQxMjBCQkEyRDAwODE5MzM5IC8qIFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBMEQ3ODYxMjIwNzkxRUMwMEVCQ0Y1NCAvKiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOyBwYXRo
ID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3Bw
OyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBMTUwNjcyMURENTYyOTgwMDFGNEI1
OCAvKiBjb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gImNvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiI7IHBhdGggPSAiRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9jb20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IiOyBzb3Vy
Y2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk3QTFFMkE4NDFFRUZFODhBMDAzN0Ew
RTAgLyogQVBJTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVBJTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0EzQUNFMUExRUVFRjc4QzAwQTg2NEE0IC8qIEFQSUluamVjdGVkQnVuZGxlUGFn
ZUxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElJbmpl
Y3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTM1NDksNiArMzU1MSw5IEBACiAJCTdBOUNEOEMyMUM3NzlBRDYwMEQ5RjZDNyAvKiBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QUI2RUE0NDFFRUFBRTIzMDAwMzdCMkIgLyogQVBJSWNv
bkRhdGFiYXNlQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUlj
b25EYXRhYmFzZUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUI2RUE0
NjFFRUFCNkIwMDAwMzdCMkIgLyogQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBBUElHZW9sb2NhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBQ0U4MkU3MjIxQ0FFMDYwMDBEQTk0QyAvKiBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmg7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUNF
ODJFODIyMUNBRTA3MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZS5jcHA7IHBhdGggPSBDbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBQ0U4MkU5MjIxREU3MjIwMDBE
QTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tOyBwYXRoID0gQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MUUxRTc5QTNCNDAwNDM4QTA1IC8qIFdlYkVycm9ycy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJFcnJvcnMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUYyMzYxRjFFNzlBM0Q4MDA0MzhBMDUgLyog
V2ViRXJyb3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkVycm9ycy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUYyMzYyMjFFNzlBNDMxMDA0MzhBMDUg
LyogV2ViRXJyb3JzQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJFcnJvcnNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM2
OTksNyArMzcwNCw2IEBACiAJCTgzNzJEQjI2MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM3MkRCMjcxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJODM3MkRCMkUxQTY3N0Q0QTAwQzY5N0M1IC8qIFdLRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLRGlhZ25vc3RpY0xvZ2dp
bmdSZXN1bHRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTgzN0E2NjAwMjBF
MkFEODQwMEE5REJEOCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4Mzg5MUI2MjFBNjhCMzQyMDAzMEYzODYgLyogQVBJRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFCNjgxQTY4QkVCQzAw
MzBGMzg2IC8qIF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gX1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2QTFBNjhDMzBCMDAzMEYzODYgLyogRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUz
MjUsNyArNTMyOSw2IEBACiAJCQkJQ0RBMjlBMUUxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5oICovLAogCQkJCUNEQTI5QTIyMUNCRUI2MUEwMDkwMUNDRiAv
KiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4gKi8sCiAJCQkJQ0RBMjlB
MUYxQ0JFQjVGQjAwOTAxQ0NGIC8qIFBsYXliYWNrU2Vzc2lvbk1hbmFnZXJQcm94eS5tbSAqLywK
LQkJCQk4MzdBNjYwMDIwRTJBRDg0MDBBOURCRDggLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlQ29jb2EubW0gKi8sCiAJCQkJNUNBOTg1NEIyMTBCRUI3MzAwNTdFQjZCIC8qIFNh
ZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5tbSAqLywKIAkJCQkxQTAwMkQ0NzE5NkIzNDVEMDBCOUFE
NDQgLyogU2Vzc2lvblN0YXRlQ29kaW5nLmggKi8sCiAJCQkJMUEwMDJENDYxOTZCMzQ1RDAwQjlB
RDQ0IC8qIFNlc3Npb25TdGF0ZUNvZGluZy5tbSAqLywKQEAgLTY5MjcsMTAgKzY5MzAsMTUgQEAK
IAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTdBMEQ3ODYyMjIwNzkxRUQwMEVCQ0Y1
NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgKi8sCisJCQkJN0Ew
RDc4NjEyMjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlLmggKi8sCiAJCQkJN0FGQkQzNjQyMUU1MUJBQjAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAgKi8sCiAJCQkJN0FGQkQzNjUyMUU1MUJBQjAwNURCQUNC
IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oICovLAogCQkJCTdBRkJEMzY5
MjFFNTQyRTgwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3Jh
Z2UuY3BwICovLAogCQkJCTdBRkJEMzY4MjFFNTQyRTgwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2UuaCAqLywKKwkJCQk3QUNFODJFODIyMUNBRTA3MDAw
REE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKKwkJCQk3QUNFODJF
NzIyMUNBRTA2MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmggKi8sCisJ
CQkJN0FDRTgyRTkyMjFERTcyMjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZUNvY29hLm1tICovLAogCQkJCTdBNDFFOUZBMjFGODFEQUMwMEI4OENEQiAvKiBTaG91bGRHcmFu
ZGZhdGhlclN0YXRpc3RpY3MuaCAqLywKIAkJCQk3QTNGRUNBMTIxRjdDMDk3MDBGMjY3Q0QgLyog
U3RvcmFnZUFjY2Vzc1N0YXR1cy5oICovLAogCQkJCTdBODQzQTFBMjFFNDFGQjIwMERFRjY2MyAv
KiBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLApAQCAtOTYwOCw2ICs5NjE2
LDcgQEAKIAkJCQk3QzM2MUQ3OTE5MjgwM0JEMDAzNkE1OUQgLyogV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTU3MzlCQkQxQjQyMDQy
RDAwRDI1OEMxIC8qIFdlYlVzZXJNZWRpYUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNF
RTU3NUMxREI3RDYxMTAwQzc0QzUwIC8qIFdlYlZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKKwkJCQk1NzJGRDQ0MzIyMjY1Q0UyMDBBMUVDQzMgLyogV2ViVmlld0RpZE1v
dmVUb1dpbmRvd09ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREZDN0RCQjFCQ0NDMTk1
MDBDMTU0OEMgLyogV2ViVmlld0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5Q0Q1NUFBMTI4
RTI5NEYwMDEzM0M4NSAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0QmFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjkyMzJERjQxOEIyOUQ2ODAwRDA1OTZGIC8qIFdLQWNjZXNzaWJpbGl0
eVdlYlBhZ2VPYmplY3RNYWMuaCBpbiBIZWFkZXJzICovLApAQCAtOTc0NCw3ICs5NzUzLDYgQEAK
IAkJCQlDNTQyNTZCQTE4QkVDMThDMDBERTQxNzkgLyogV0tGb3JtU2VsZWN0Q29udHJvbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwOENGNTIxRDYzQzEzQTAwQjQ4REYxIC8qIFdLRm9ybVNlbGVj
dFBpY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwOENGNTQxRDYzQzE0MDAwQjQ4REYxIC8q
IFdLRm9ybVNlbGVjdFBvcG92ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTU3MkZENDQzMjIyNjVD
RTIwMEExRUNDMyAvKiBXZWJWaWV3RGlkTW92ZVRvV2luZG93T2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDRTQ2OTVBMTIxNEVERjQwMDBCOThFQiAvKiBXS0Zvcm1TdWJtaXNzaW9uTGlz
dGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3REZBNzAwMTgxMEJCOTIwMDFGNEE5RiAvKiBX
S0ZvdW5kYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDAxMzlCMTEwRkE0MjAwMDNCOEE2
NyAvKiBXS0ZyYW1lLmggaW4gSGVhZGVycyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363577</attachid>
            <date>2019-03-04 18:15:30 -0800</date>
            <delta_ts>2019-03-04 18:23:13 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-194867-20190304181529.patch</filename>
            <type>text/plain</type>
            <size>285134</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFhNDFiYzdiZjQ0MjFk
ZjBmMWZhYTE1Njg5MzdlYzcxNWU0NmI1Mi4uZTA0OGVjNzUwMGMzNjAzOGE2NTlkNzlkMmQ3Yzk3
OTNhZTI1ODYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVt
ZXouCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBvcnQg
dXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxzbyBl
eHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdlYkNv
cmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRhYmFz
ZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIwMTkt
MDMtMDQgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2Vi
IEdQVV0gQmxpdHRpbmcgZnVuY3Rpb24gcHJvdG90eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1MTYzNWMyMDQy
ODcyY2MxN2I4YWFkZTE1YzZhNzhhZjNjMWQ5NDY4Li5mZTRkZDdhYTM1NDkwNzNkZGZjMDU4Yzk5
OTkyZGQ3MzU3OTZiMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4MyBAQAorMjAxOS0wMi0yMSAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgYSBTUUxp
dGUgZGF0YWJhc2UgdG8gaG9sZCB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkYXRhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ4NjcKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzI0MjQwODU0PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlz
IER1bWV6LgorCisgICAgICAgIFRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGFiYXNlIHBs
aXN0IGlzIGluZWZmaWNpZW50LiBJdCByZXF1aXJlcyBtb3JlIG1lbW9yeSB1c2UKKyAgICAgICAg
dGhhbiBpdCBuZWVkcywgYW5kIGZvcmNlcyBsb3RzIG9mIGxvb3BpbmcgYW5kIHN0cmluZyBjb21w
YXJpc29ucyB0byBmaW5kIGluZm9ybWF0aW9uLgorCisgICAgICAgIFRoaXMgcHJvYmxlbSBoYXMg
YWxyZWFkeSBiZWVuIHNvbHZlZCBpbiB0aGUgZm9ybSBvZiByZWxhdGlvbmFsIGRhdGFiYXNlcy4g
V2UgdXNlIHRoZW0KKyAgICAgICAgZWxzZXdoZXJlIGluIFdlYktpdCwgYW5kIHNob3VsZCBkbyBz
byBmb3IgdGhpcyBzdG9yYWdlIGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjcmVhdGVz
IGFuIG9wdGlvbmFsIFNRTGl0ZSBkYXRhYmFzZSB0byBoYW5kbGUgSVRQIG9wZXJhdGlvbnMuCisK
KyAgICAgICAgMS4gSXQgYWRkcyBhIG5ldyBpbnRlcm5hbCBleHBlcmltZW50YWwgZmVhdHVyZSBm
bGFnIHRvIGFjdGl2YXRlIGl0LiBJdCByZXF1aXJlcyB0aGUgdXNlcgorICAgICAgICAgICBleGl0
IGFuZCByZXN0YXJ0IHRoZSBwcm9jZXNzIHRvIHRha2UgZWZmZWN0LgorICAgICAgICAyLiBJdCBw
b3B1bGF0ZXMgaXRzZWxmIGZyb20gdGhlIGV4aXN0aW5nIHBsaXN0IGZpbGUgKGlmIGl0IGV4aXN0
cykuCisgICAgICAgIDMuIEl0IHN0b3BzIHVzaW5nIHRoZSBwbGlzdCBpbiBmYXZvciBvZiB0aGUg
ZGF0YWJhc2UuCisgICAgICAgIDQuIEl0IGRvZXMgcXVlcmllcyBhbmQgb3RoZXIgb3BlcmF0aW9u
cyB1c2luZyB0aGUgZGF0YWJhc2UgaW5zdGVhZCBvZiB0aGUgb2xkIGhhc2ggdGFibGUKKyAgICAg
ICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgdGhl
IGV4aXNpdGluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgY2xhc3MgaW50byBh
IGJhc2UKKyAgICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGNsYXNzLCB3aGljaCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgaXMgYmFzZWQgb24uCisgICAgICAgIEl0
IGFkZHMgYSBuZXcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUgdGhhdCBpcyBp
bXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBTUUwKKyAgICAgICAgb3BlcmF0aW9ucy4KKworICAgICAg
ICBUaGVzZSBjb2RlIGNoYW5nZXMgc2hvdWxkIG5vdCBoYXZlIGFueSBpbXBhY3Qgb24gZXhpc3Rp
bmcgb3BlcmF0aW9ucywgYW5kIHdoZW4gZW5hYmxlZAorICAgICAgICBzaG91bGQgcHJvZHVjZSB0
aGUgc2FtZSB0ZXN0IHJlc3VsdHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVu
dHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERv
bWFpblJlbGF0aW9uc2hpcCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklE
RnJvbVN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRhdGFiYXNlSXNFbXB0
eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0
cnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZl
bHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAg
ICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRv
UHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6bGlzdFRvU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0b3Jh
Z2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9w
ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRm
YXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJl
ZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERv
bWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNh
dGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llVHJlYXRtZW50Rm9yT3JpZ2luIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhh
c1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2sgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6dXBkYXRlQ29va2llQmxvY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJldmFs
ZW50RG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJF
eHBpcmVkVXNlckludGVyYWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjp1cGRhdGVMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Up
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291
cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJEYXRh
Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnRvZGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2ggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGlu
Z0RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjptZXJnZU9wZXJhdGluZ0RhdGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZUltcG9ydGFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6On5SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlbW92ZURhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRE
YXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmRlYnVn
TG9nRG9tYWluc0luQmF0Y2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNYXhT
dGF0aXN0aWNzRW50cmllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1Rlc3RpbmdFdmVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmg6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aXNEZWJ1Z01vZGVFbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzdG9yZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGlu
Z0RhdGU6OmZyb21XYWxsVGltZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnRv
ZGF5KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2gg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8IGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNvbXB1dGVJ
bXBvcnRhbmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vz
c2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhl
cmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldENhY2hlTWF4QWdlQ2FwKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNsaWVu
dFNpZGVDb29raWVzQWdlQ2FwKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcyBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0
YXRpc3RpY3NFcGlyYXRpb25UaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0Rh
dGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNE
b3duVG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlLmguCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGlu
Z0RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlz
RW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RvcmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGVi
dWdMb2dnZ2luZ0VuYWJsZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVD
b2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmbHVz
aEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1By
b2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omhhc1N0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVy
T3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExv
YWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVz
ZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNj
aGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0
ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdU
aW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFBs
YXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjo6Y2FsY3Vs
YXRlUmVzb3VyY2VQcmV2YWxlbmNlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmg6CisgICAgICAgICogU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAz
LTA0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnRD
aGFuZ2VPYnNlcnZlcl0gSW50cm9kdWNlIGZpeGVkIGR1cmF0aW9uIGNvbnRlbnQgb2JzZXJ2YXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5kZXgg
NTRmYjZiYjc5MDFhZTFkZGE0MmU3N2NlZmUzN2FkNDljYjZlODg5Yi4uOWVhMjY5OGYxZmRjOGU3
OWVmYjQyOWNmODczZDI0ZjgwZDU0OWVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXRwRGVidWdNb2Rl
ID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQgc2V0SXNJVFBEYXRhYmFzZUVuYWJs
ZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IGlzRW5hYmxlZDsg
fQorICAgIGJvb2wgaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSVRQ
RGF0YWJhc2VFbmFibGVkOyB9CisKICAgICB2b2lkIHNldFJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VB
Y2Nlc3MoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1Jlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3Mg
PSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoKSBj
b25zdCB7IHJldHVybiBtX2lzUmVzdHJpY3RlZEhUVFBSZXNwb25zZUFjY2VzczsgfQogCkBAIC01
MzQsNiArNTM3LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fbW91c2Vtb3ZlRXZlbnRIYW5kbGlu
Z1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAKKyAgICBib29sIG1f
aXNJVFBEYXRhYmFzZUVuYWJsZWQgeyBmYWxzZSB9OworCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6
TmV2ZXJEZXN0cm95ZWQ8UnVudGltZUVuYWJsZWRGZWF0dXJlcz47CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IDQwZmNlMDY0NDA0NTEz
NzRkNDY0OTMwYWY0NmM5MDc3M2UzZjg2YTQuLjY0M2QyNDI2NzY5ZmY0MDA0MTg5YThmNjY5MGVi
MWQ0MzA2YWIyYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIHRhYmxlRXhpc3RzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJBbGxUYWJs
ZXMoKTsKLSAgICBpbnQgcnVuVmFjdXVtQ29tbWFuZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIGlu
dCBydW5WYWN1dW1Db21tYW5kKCk7CiAgICAgaW50IHJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFu
ZCgpOwogICAgIAogICAgIGJvb2wgdHJhbnNhY3Rpb25JblByb2dyZXNzKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAppbmRleCBhMTkzZDhjMjRiMGJkMDI0OTY1YmIxMDU0NDY0
MjNiYmM4ZjViZmU5Li5mMzY2YzczMDJmNGJhNWE1ZjRhYzFhNjFjMTYyNjMzMTM5MzJkM2Q3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBAIC03
Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0Q29sdW1uTmFtZShpbnQgY29sKTsK
ICAgICBTUUxWYWx1ZSBnZXRDb2x1bW5WYWx1ZShpbnQgY29sKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgZ2V0Q29sdW1uVGV4dChpbnQgY29sKTsKLSAgICBkb3VibGUgZ2V0Q29sdW1uRG91
YmxlKGludCBjb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBnZXRDb2x1bW5Eb3VibGUo
aW50IGNvbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGdldENvbHVtbkludChpbnQgY29sKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IGdldENvbHVtbkludDY0KGludCBjb2wpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBnZXRDb2x1bW5CbG9iQXNTdHJpbmcoaW50IGNvbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MmM4ZTk0YzNkMjcxMTkyM2E3ZjUyMGM2YjcxYmJmZjA0NTc4ZmEwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtMCwwICsxLDE1NTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCIKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb24uaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgorI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0
YXRlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5p
c0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmlu
ZSBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pIFJFTEVB
U0VfTE9HX0VSUk9SX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0
aGlzLCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RChzZXNzaW9uSUQsIGZtdCwgLi4uKSAgKCh2b2lkKTApCisjZGVmaW5lIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQsIC4uLikgICgodm9pZCkwKQorI2VuZGlmCisK
K2NvbnN0ZXhwciBhdXRvIG9ic2VydmVkRG9tYWluQ291bnRRdWVyeSA9ICJTRUxFQ1QgQ09VTlQo
KikgRlJPTSBPYnNlcnZlZERvbWFpbnMiX3M7Citjb25zdGV4cHIgYXV0byBpbnNlcnRPYnNlcnZl
ZERvbWFpblF1ZXJ5ID0gIklOU0VSVCBJTlRPIE9ic2VydmVkRG9tYWlucyAocmVnaXN0cmFibGVE
b21haW4sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIgorICAgICJtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSwgZ3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZh
bGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9V
c2VySW50ZXJhY3Rpb24sIgorICAgICJ0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJKSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIl9zOwor
Y29uc3RleHByIGF1dG8gaW5zZXJ0VG9wTGV2ZWxEb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBU
b3BMZXZlbERvbWFpbnMgVkFMVUVTICg/KSJfczsKK2NvbnN0ZXhwciBhdXRvIGRvbWFpbklERnJv
bVN0cmluZ1F1ZXJ5ID0gIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVS
RSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgSU5UTyBTdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnMgKGRvbWFpbklELCB0b3BMZXZlbERvbWFpbklEKSAiCisgICAgIlNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1
ZXJ5ID0gIklOU0VSVCBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKHNvdXJjZURvbWFp
bklELCB0b0RvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBG
Uk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgPSA/ICIK
KyAgICAiQU5EIHRvRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8gdG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tICh0YXJnZXREb21haW5JRCwgZnJvbURvbWFpbklEKSAiCisgICAgIlNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21F
eGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbSBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gIgorICAgICJBTkQgZnJvbURv
bWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgSU5UTyBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIChzdWJGcmFtZURvbWFpbklELCB0b3BGcmFtZURvbWFpbklEKSAiCisgICAgIlNFTEVDVCA/
LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNR
dWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMgV0hFUkUgc3ViRnJhbWVEb21haW5JRCA9ID8gIgorICAgICJBTkQgdG9wRnJhbWVE
b21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/KSkiX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyAoc3VicmVzb3VyY2VEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkgIgorICAg
ICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zICIKKyAgICAiV0hFUkUgc3VicmVzb3VyY2VEb21haW5J
RCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1
dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBJTlRPIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQp
ICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJl
Z2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/
ICIKKyAgICAiQU5EIHRvRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8g
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIChzdWJyZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWlu
SUQpICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBG
Uk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBXSEVSRSBzdWJyZXNvdXJjZURvbWFp
bklEID0gPyAiCisgICAgIkFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3Rl
eHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gPyAiCisgICAgIldIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2Nv
bnN0ZXhwciBhdXRvIHVwZGF0ZUxhc3RTZWVuUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgbGFzdFNlZW4gPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0
ZXhwciBhdXRvIHVwZGF0ZVByZXZhbGVudFJlc291cmNlUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVk
RG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNQ
cmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlUXVlcnkgPSAi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNWZXJ5UHJldmFsZW50ID0gPyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBpc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZVF1ZXJ5ID0gIlNFTEVDVCBpc1ZlcnlQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gY2xlYXJQcmV2
YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFs
ZW50ID0gMCwgaXNWZXJ5UHJldmFsZW50ID0gMCBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8i
X3M7Citjb25zdGV4cHIgYXV0byBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgaGFk
VXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0
byB1cGRhdGVHcmFuZGZhdGhlcmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
Z3JhbmRmYXRoZXJlZCA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3Rl
eHByIGF1dG8gaXNHcmFuZGZhdGhlcmVkUXVlcnkgPSAiU0VMRUNUIGdyYW5kZmF0aGVyZWQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3Rl
eHByIGF1dG8gZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSBBTkQg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPCA/Il9zOworCitjb25zdGV4cHIgYXV0byBj
cmVhdGVPYnNlcnZlZERvbWFpbiA9ICJDUkVBVEUgVEFCTEUgT2JzZXJ2ZWREb21haW5zICgiCisg
ICAgImRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQg
Tk9UIE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEws
ICIKKyAgICAiaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5URUdFUiBO
T1QgTlVMTCwgIgorICAgICJpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2
YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5V
TEwsIgorICAgICJ0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24g
SU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFj
Y2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxMKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVh
dGVUb3BMZXZlbERvbWFpbnMgPSAiQ1JFQVRFIFRBQkxFIFRvcExldmVsRG9tYWlucyAoIgorICAg
ICJ0b3BMZXZlbERvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIENPTlNUUkFJTlQgZmtEb21h
aW5JRCBGT1JFSUdOIEtFWSh0b3BMZXZlbERvbWFpbklEKSAiCisgICAgIlJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29u
c3RleHByIGF1dG8gY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zID0gIkNS
RUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIKKyAgICAiZG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwsICIKKyAgICAiQ09OU1RSQUlOVCBma0RvbWFpbklEIEZPUkVJR04g
S0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVM
RVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJF
TkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUp
OyJfczsKKyAgICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic291
cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
LCAiCisgICAgIkZPUkVJR04gS0VZKHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVs
RG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JF
SUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERv
bWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29uc3RleHByIGF1dG8gY3Jl
YXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb20gKCIKKyAgICAidGFyZ2V0RG9tYWluSUQgSU5URUdFUiBOT1QgTlVM
TCwgZnJvbURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkodGFy
Z2V0RG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQp
IE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVG
RVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NB
REUpOyJfczsKKyAgICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMgPSAiQ1JFQVRFIFRBQkxFIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIK
KyAgICAic3ViRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b3BGcmFtZURvbWFpbklE
IElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3ViRnJhbWVEb21haW5JRCkg
UkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAi
CisgICAgIkZPUkVJR04gS0VZKHRvcEZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxE
b21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiX3M7CisgICAgCitj
b25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNS
RUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCisgICAgInN1YnJl
c291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VS
IE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVS
RU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAg
ICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlu
cyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29uc3Rl
eHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9ICJDUkVBVEUgVEFC
TEUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFp
bklEIElOVEVHRVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAg
ICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9t
YWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9E
b21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBD
QVNDQURFKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbSAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21E
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNl
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUsIFdvcmtR
dWV1ZSYgd29ya1F1ZXVlLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoKQorICAg
IDogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUpCisgICAgLCBt
X3N0b3JhZ2VEaXJlY3RvcnlQYXRoKHN0b3JhZ2VEaXJlY3RvcnlQYXRoICsgIi9vYnNlcnZhdGlv
bnMuZGIiKQorICAgICwgbV9vYnNlcnZlZERvbWFpbkNvdW50KG1fZGF0YWJhc2UsIG9ic2VydmVk
RG9tYWluQ291bnRRdWVyeSkKKyAgICAsIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSkKKyAgICAsIG1faW5zZXJ0VG9w
TGV2ZWxEb21haW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgaW5zZXJ0VG9wTGV2ZWxEb21haW5RdWVy
eSkKKyAgICAsIG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50KG1fZGF0YWJhc2UsIGRvbWFp
bklERnJvbVN0cmluZ1F1ZXJ5KQorICAgICwgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURv
bWFpbnNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21h
aW5zUXVlcnkpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8obV9kYXRhYmFzZSwg
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5KQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvRXhpc3RzKG1fZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9FeGlz
dHNRdWVyeSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKG1fZGF0YWJhc2Us
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5KQorICAgICwgbV90b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb21FeGlzdHMobV9kYXRhYmFzZSwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tRXhpc3RzUXVlcnkpCisgICAgLCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMobV9k
YXRhYmFzZSwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5KQorICAgICwgbV9zdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMobV9kYXRhYmFzZSwgc3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluRXhpc3RzUXVlcnkpCisgICAgLCBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnMobV9kYXRhYmFzZSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5
KQorICAgICwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMobV9kYXRhYmFz
ZSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzUXVlcnkpCisgICAgLCBtX3N1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8obV9kYXRhYmFzZSwgc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb1F1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSkK
KyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKG1fZGF0YWJhc2UsIHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb21FeGlzdHMobV9kYXRhYmFzZSwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tRXhpc3RzUXVlcnkpCisgICAgLCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQobV9kYXRhYmFzZSwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5KQorICAgICwg
bV91cGRhdGVMYXN0U2VlblN0YXRlbWVudChtX2RhdGFiYXNlLCB1cGRhdGVMYXN0U2VlblF1ZXJ5
KQorICAgICwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNlLCB1
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAgICwgbV9pc1ByZXZhbGVudFJlc291cmNl
U3RhdGVtZW50KG1fZGF0YWJhc2UsIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1f
dXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsIHVwZGF0ZVZl
cnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAgICwgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAg
ICwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50
KG1fZGF0YWJhc2UsIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5KQorICAgICwgbV91cGRhdGVHcmFu
ZGZhdGhlcmVkU3RhdGVtZW50KG1fZGF0YWJhc2UsIHVwZGF0ZUdyYW5kZmF0aGVyZWRRdWVyeSkK
KyAgICAsIG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50KG1fZGF0YWJhc2UsIGlzR3JhbmRmYXRo
ZXJlZFF1ZXJ5KQorICAgICwgbV9maW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCht
X2RhdGFiYXNlLCBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblF1ZXJ5KQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmVnaXN0
ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
b3BlbihtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3Bl
biBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVi
bGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgYSB3
b3JrZXJRdWV1ZSwgdGhlIHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBiZSBjYWxsZWQg
YnkgZGlmZmVyZW50IHRocmVhZHMuCisgICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hl
Y2tzKCk7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIk9ic2VydmVkRG9tYWlu
cyJfcykpIHsKKyAgICAgICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMs
IGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIXByZXBhcmVTdGF0ZW1lbnRzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnByZXBhcmVTdGF0ZW1lbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cywg
ZGF0YWJhc2UgcGF0aDogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCksIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd29ya1F1ZXVl
LmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAg
ICAgICAgaWYgKHdlYWtUaGlzKQorICAgICAgICAgICAgd2Vha1RoaXMtPmNhbGN1bGF0ZUFuZFN1
Ym1pdFRlbGVtZXRyeSgpOworICAgIH0pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIGlmIChtX29i
c2VydmVkRG9tYWluQ291bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdCA9
ICFtX29ic2VydmVkRG9tYWluQ291bnQuZ2V0Q29sdW1uSW50KDApOworICAgIAorICAgIGludCBy
ZXNldFJlc3VsdCA9IG1fb2JzZXJ2ZWREb21haW5Db3VudC5yZXNldCgpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y3JlYXRlU2NoZW1hKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVPYnNlcnZlZERvbWFp
bikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9ic2VydmVkRG9tYWlu
cyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BMZXZlbERvbWFp
bnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BMZXZlbERvbWFp
bnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCks
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRl
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMi
LCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRl
Q29tbWFuZChjcmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zKSkgeworICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyB0
YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUg
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVj
dXRlQ29tbWFuZChjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
byB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb20pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0
ZSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVu
dHMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICAKKyAgICBp
ZiAobV9vYnNlcnZlZERvbWFpbkNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVEb21haW5zU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20ucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0
cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWlucy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMucHJl
cGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8ucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2NsZWFyUHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2hh
ZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV9maW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICkgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cHJlcGFyZVN0YXRlbWVudHMgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICV7cHVi
bGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5zZXJ0T2JzZXJ2ZWREb21haW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0
YXRpc3RpY3MpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgQVNTRVJUKGNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3QobG9hZFN0YXRpc3Rp
Y3MucmVnaXN0cmFibGVEb21haW4pKTsKKyNlbmRpZgorCisgICAgaWYgKG1faW5zZXJ0T2JzZXJ2
ZWREb21haW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgbG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVE
b21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVk
RG9tYWluU3RhdGVtZW50LmJpbmREb3VibGUoMiwgbG9hZFN0YXRpc3RpY3MubGFzdFNlZW4uc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNl
cnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDMsIGxvYWRTdGF0aXN0aWNzLmhhZFVz
ZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWRE
b21haW5TdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBsb2FkU3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRJbnQoNSwg
bG9hZFN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
aW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg2LCBsb2FkU3RhdGlzdGljcy5p
c1ByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDcsIGxvYWRTdGF0aXN0aWNzLmlzVmVyeVByZXZh
bGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudC5iaW5kSW50KDgsIGxvYWRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3Zl
ZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQuYmluZEludCg5LCBsb2FkU3RhdGlzdGljcy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9Vc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2Vy
dmVkRG9tYWluU3RhdGVtZW50LmJpbmRJbnQoMTAsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpICE9IFNRTElURV9PSykgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9t
YWluIGZhaWxlZCB0byBjb21taXQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBt
X2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWxh
dGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQsIHVuc2ln
bmVkIGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4p
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3Rh
dGVtZW50LmJpbmRJbnQoMSwgZmlyc3REb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHN0YXRlbWVudC5iaW5kVGV4dCgyLCBzZWNvbmREb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om1faW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwU3RhdGVtZW50IGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVsYXRpb25TaGlwRXhpc3RzID0gISFz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gc3RhdGVt
ZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQg
PT0gU1FMSVRFX09LKTsKKyAgICAKKyAgICByZXR1cm4gcmVsYXRpb25TaGlwRXhpc3RzOworfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQsIHVuc2lnbmVk
IGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWUpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRJbnQoMSwg
ZG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwg
dG9wRnJhbWUuc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFp
blJlbGF0aW9uc2hpcFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtw
dWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlu
dCByZXNldFJlc3VsdCA9IHN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVz
ZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKyNpZm5kZWYgTkRFQlVHCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1E
b21haW5Eb2VzTm90RXhpc3QgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAg
IGlmIChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVu
dC5yZXNldCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3Vs
dCA9PSBTUUxJVEVfT0spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50
IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOwor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3Vuc2lnbmVkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSAwOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5n
U3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZyb21TdHJpbmcgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZG9tYWluSUQ7
CisgICAgfQorCisgICAgZG9tYWluSUQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMCk7CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0
cmluZ1N0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJl
c2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIGRvbWFpbklEOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRT
dGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0
byByZWdpc3RyYWJsZURvbWFpbklEID0gZG9tYWluSUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFi
bGVEb21haW4pOworICAgIGZvciAoYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGlj
cy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVu
dCwgcmVnaXN0cmFibGVEb21haW5JRCwgdG9wRnJhbWVEb21haW4pOworCisgICAgZm9yIChhdXRv
JiB0b0RvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pCisg
ICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8sIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvRG9tYWluKTsKKyAgICAKKyAgICBmb3IgKGF1dG8m
IGZyb21Eb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20p
CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSwgcmVnaXN0cmFibGVEb21haW5JRCwgZnJvbURvbWFpbik7CisgICAgCisgICAgZm9y
IChhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnMpCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
KTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9hZFN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVE
b21haW5JRCwgdG9wRnJhbWVEb21haW4pOworICAgIAorICAgIGZvciAoYXV0byYgdG9Eb21haW4g
OiBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCBy
ZWdpc3RyYWJsZURvbWFpbklELCB0b0RvbWFpbik7CisgICAgCisgICAgZm9yIChhdXRvJiBmcm9t
RG9tYWluIDogbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKQor
ICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQsIGZyb21Eb21haW4pOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9y
ZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmIG1lbW9yeVN0b3JlKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFpc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9y
ZS5kYXRhKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFw
KQorICAgICAgICBpbnNlcnRPYnNlcnZlZERvbWFpbihzdGF0aXN0aWMudmFsdWUpOworCisgICAg
Ly8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9yIGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNv
IHdlCisgICAgLy8gY2FuIHJlZmVyIHRvIHRoZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVz
CisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwKQorICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRpc3RpYy52YWx1ZSk7CisKKyAgICBtX2RhdGFiYXNl
LnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FKDE5NTA4OCk6IEltcGxl
bWVudCBmb3IgRGF0YWJhc2UgdmVyc2lvbi4KK30KKworc3RhdGljIFN0cmluZyBkb21haW5zVG9T
dHJpbmcoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byBkb21haW5OYW1lIDogZG9tYWlu
cykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChkb21haW5OYW1lLnN0cmluZygpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJyInKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRS
ZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRhdGFS
ZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNU
b1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3Jl
bWVudFN0YXRpc3RpY3NGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9
cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGly
ZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWdu
ZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVj
dXJzaXZlQ2FsbHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBp
ZiAobnVtYmVyT2ZSZWN1cnNpdmVDYWxscyA+PSBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5S
ZWRpcmVjdFRyYWNlQmFjaykgeworICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCAiSGl0ICV1IHJlY3Vyc2l2ZSBjYWxscyBpbiByZWRpcmVjdCBiYWNrdHJhY2UuIFJl
dHVybmluZyBlYXJseS4iLCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNl
QmFjayk7CisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworICAgIH0KKyAg
ICAKKyAgICArK251bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+
IG5ld2x5SWRlbnRpZmllZERvbWFpbnM7CisgICAgU1FMaXRlU3RhdGVtZW50IGZpbmRTdWJyZXNv
dXJjZXMobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklE
ID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJy
ZXNvdXJjZURvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIocHJpbWFyeURvbWFpbklEKSwgIkFO
RCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIikpOworICAgIGlmIChmaW5kU3VicmVz
b3VyY2VzLnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKKyAgICAgICAgd2hpbGUgKGZpbmRTdWJy
ZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3RG9t
YWluSUQgPSBmaW5kU3VicmVzb3VyY2VzLmdldENvbHVtbkludCgwKTsKKyAgICAgICAgICAgIGF1
dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChu
ZXdEb21haW5JRCk7CisgICAgICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKKyAgICAg
ICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFRvcEZyYW1lcyhtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZy
b21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9i
c2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRhcmdldERvbWFpbklEID0gIiwgU3Ry
aW5nOjpudW1iZXIocHJpbWFyeURvbWFpbklEKSwgIkFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2
YWxlbnQgPSAwIikpOworICAgIGlmIChmaW5kVG9wRnJhbWVzLnByZXBhcmUoKSA9PSBTUUxJVEVf
T0spIHsKKyAgICAgICAgd2hpbGUgKGZpbmRUb3BGcmFtZXMuc3RlcCgpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgICAgIGF1dG8gbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLmdldENvbHVt
bkludCgwKTsKKyAgICAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVk
aXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgICAgICBpZiAoaW5z
ZXJ0UmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5z
Lmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmV3bHlJ
ZGVudGlmaWVkRG9tYWlucy5lbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNp
dmVDYWxsczsKKworICAgIGZvciAoYXV0byBkb21haW5JRCA6IG5ld2x5SWRlbnRpZmllZERvbWFp
bnMpCisgICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4oZG9tYWluSUQsIG5vblBy
ZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7CisKKyAg
ICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEl0ZXJhdG9yVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IFdURjo6SXRlcmF0
b3JSYW5nZTxJdGVyYXRvclR5cGU+JiB2YWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOworICAgIGZvciAoYXV0byBkb21haW5JRCA6IHZhbHVlcykgeworICAgICAgICBpZiAoIWJ1
aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihkb21haW5JRCk7CisgICAgfQorICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFN0ZFNldDx1bnNp
Z25lZD4gcHJldmFsZW50RHVlVG9SZWRpcmVjdDsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVz
b3VyY2VSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIERJU1RJTkNUIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21h
aW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFO
RCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3Vy
Y2VSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdo
aWxlIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQoc3VicmVzb3VyY2VSZWRp
cmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0ZVN0YXRl
bWVudCB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElO
Q1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9NIFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5z
LmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNl
cnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJhbWVSZWRpcmVj
dFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlICh0b3BG
cmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAg
cHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdU
Rjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVl
VG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikp
OworICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRv
UHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKworSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBIYXNoTWFwPHVuc2ln
bmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiByZXN1bHRzOworICAgIFNRTGl0ZVN0YXRl
bWVudCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSBpc1ZlcnlQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAobm90VmVyeVBy
ZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBrZXkgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkp
OworICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcobm90
VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAg
ICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZTo6TG93CisgICAgICAgICAgICAgICAgLCAwLCAwLCAwLCAwIH0pOworICAgICAgICAgICAg
cmVzdWx0cy5hZGQoa2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvIHZhbHVlIDogcmVzdWx0cy5rZXlzKCkpIHsK
KyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodmFsdWUpOwor
ICAgIH0KKworICAgIGF1dG8gZG9tYWluSURzT2ZJbnRlcmVzdCA9IGJ1aWxkZXIudG9TdHJpbmco
KTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFp
bklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRl
cmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09L
KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5J
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJl
c3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMu
ZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3Qs
ICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7
CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklE
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBy
ZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRz
LmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnND
b3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
SVRFX09LKSB7CisgICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNl
RG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
byBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JP
VVAgQlkgc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxl
ICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQp
OworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdHM7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3Np
ZnlSZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNv
dXJjZXMoKTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9
IGNsYXNzaWZpZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0
aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsK
KyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5j
ZSkKKyAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJl
Z2lzdGVyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgfQorfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNl
cygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgZW5zdXJlUHJldmFs
ZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRp
cmVjdGVkVG9QcmV2YWxlbnQoKTsKKyAgICByZWNsYXNzaWZ5UmVzb3VyY2VzKCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9yYWdlSWZOZWVk
ZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fZGF0YWJhc2Uu
cnVuVmFjdXVtQ29tbWFuZCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBtX2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vz
cyhjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9t
YWluJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIHN3
aXRjaCAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAgIGNh
c2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOgorICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRyZWF0
bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwOgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxv
dzoKKyAgICAgICAgLy8gRG8gbm90aGluZworICAgICAgICBicmVhazsKKyAgICB9OworCisgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHN1YkZy
YW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWlu
ID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIFtzdG9yZSA9
IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRp
c3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHJlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVl
c3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1l
RG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwg
Ym9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NT
dGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIHN3aXRjaCAo
Y29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAgIGNhc2UgQ29v
a2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOiB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMg
Y29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFzIG5v
dCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1lRG9t
YWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihT
dG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2Vl
cDogeworICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFj
Y2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0
aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFz
QWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVUcmVh
dG1lbnRSZXN1bHQ6OkFsbG93OgorICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIGJyZWFr
OworICAgIH07CisKKyAgICBhdXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBwcm9tcHRFbmFi
bGVkICYmIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVT
dGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKHByb21wdEVuYWJsZWQgJiYg
IXVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpS
ZXF1aXJlc1VzZXJQcm9tcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVz
ZXJXYXNQcm9tcHRlZEVhcmxpZXIpCisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdM
b2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQg
PSAiLCBTdHJpbmc6Om51bWJlcihzdWJGcmFtZVN0YXR1cy5zZWNvbmQpKSk7CisgICAgaWYgKGlu
Y3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBp
bmNyZW1lbnRTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
e3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBncmFudFN0b3JhZ2VBY2Nlc3NJ
bnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiks
IGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkRWFybGllciwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChib29sIHdhc0dyYW50ZWRBY2Nlc3Mp
IG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzID8g
U3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fu
bm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBPcGVu
ZXJQYWdlSUQgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJiBvcGVuZXJEb21haW4pCit7Cisg
ICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVuZXJEb21haW4pOwor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJEb21haW4pCisgICAgICAgIHJldHVybjsKKworICAgIGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2Vzcyk7CisKKyAgICBpZiAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcykgIT0gQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxvdykK
KyAgICAgICAgcmV0dXJuOworCisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdF
bmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0
aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVu
ZGVyIG9wZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGlu
IHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MpLCBXVEZNb3ZlKG9wZW5lckRvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVyUGFn
ZUlELCBmYWxzZSwgW10oYm9vbCkgeyB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3Vi
RnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXNlcldhc1Byb21wdGVkTm93KSB7Cisg
ICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJGcmFt
ZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOworICAgICAgICBBU1NFUlQoaGFzSGFk
VXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluKSk7CisgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCwg
c3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgfQorCisgICAgZ3Jh
bnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUo
dG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFp
biYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBPcHRp
b25hbDxGcmFtZUlEPiBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRl
ZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzdWJGcmFtZURv
bWFpbiA9PSB0b3BGcmFtZURvbWFpbikgeworICAgICAgICBjYWxsYmFjayh0cnVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9zdG9yYWdlQWNjZXNz
UHJvbXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdlciBleHBlcmltZW50
YWwuCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBzdG9yYWdlQWNjZXNz
UHJvbXB0c0VuYWJsZWQoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYXV0byBzdWJGcmFt
ZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1
YkZyYW1lRG9tYWluKTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09IEFk
ZGVkUmVjb3JkOjpObyk7CisgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3Vi
RnJhbWVEb21haW4pKTsKKyAgICAgICAgQVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vz
c1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikpOwor
I2VuZGlmCisgICAgICAgIHNldFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdHJ1ZSwg
V2FsbFRpbWU6Om5vdygpKTsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3N1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1l
RG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwg
c3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgp
IG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIo
c3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKV0oYm9vbCB2YWx1
ZSkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0
Y2goW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHZhbHVlXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwg
IikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFp
bnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30K
KworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghZGVidWdNb2RlRW5hYmxlZCgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMik7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOworICAgIHNldFBy
ZXZhbGVudFJlc291cmNlKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VM
b2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tl
ZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOworCisgICAgaWYgKCFkZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFsUHJldmFsZW50
UmVzb3VyY2UoKSk7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAg
IHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZv
ciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9v
bCBpc01haW5GcmFtZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGJvb2wgYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4g
PT0gdG9wRnJhbWVEb21haW47CisgICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2Ft
ZVNpdGUgPSB0YXJnZXREb21haW4gPT0gc291cmNlRG9tYWluOworCisgICAgYm9vbCBzdGF0aXN0
aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzTWFpbkZyYW1lICYmICEoYXJlVGFy
Z2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291cmNlRG9tYWlu
c1NhbWVTaXRlKSkgeworICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgICAgIHVw
ZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cmVkdWNl
VGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKSk7CisKKyAgICAgICAgaWYgKCFyZWxhdGlv
bnNoaXBFeGlzdHMobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIHRhcmdldFJl
c3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSkgeworICAgICAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgdGFyZ2V0UmVzdWx0
LnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRh
dGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpc1JlZGlyZWN0ICYmICFh
cmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUpIHsKKyAgICAgICAgaWYgKGlzTWFpbkZy
YW1lKSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9tYWluKTsKKyAg
ICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0V4aXN0cywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4p
KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUbywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXRE
b21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAg
ICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tRXhpc3RzLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pKSB7CisgICAgICAg
ICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pOworICAgICAgICAgICAg
ICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9tYWluKTsK
KyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb0V4aXN0cywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXRE
b21haW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25k
LCB0YXJnZXREb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9
IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWlu
KTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tRXhpc3RzLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4p
KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4p
OworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVk
KQorICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4p
OworICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgbGFzdFNlZW4pOworCisgICAgYXV0
byB0YXJnZXREb21haW5JRCA9IHJlc3VsdC5zZWNvbmQ7CisgICAgaWYgKCFyZWxhdGlvbnNoaXBF
eGlzdHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIHRhcmdldERvbWFp
bklELCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
KG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgdGFyZ2V0RG9tYWluSUQsIHRvcEZy
YW1lRG9tYWluKTsKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
Zk5lY2Vzc2FyeSgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURv
bWFpbiYgc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHRhcmdldERvbWFp
bikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc291cmNl
RG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oc291cmNlRG9tYWluKTsKKyAgICBhdXRvIHRhcmdldERvbWFpblJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisKKyAg
ICBib29sIGlzTmV3UmVkaXJlY3RUb0VudHJ5ID0gZmFsc2U7CisgICAgaWYgKCFyZWxhdGlvbnNo
aXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLCBzb3VyY2VEb21h
aW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pKSB7CisgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHNvdXJjZURvbWFpblJl
c3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbik7CisgICAgICAgIGlzTmV3UmVkaXJlY3RUb0VudHJ5
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzTmV3UmVkaXJlY3RGcm9tRW50cnkgPSBmYWxz
ZTsKKyAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbUV4aXN0cywgdGFyZ2V0RG9tYWluUmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKSkg
eworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20sIHRhcmdldERvbWFpblJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbik7Cisg
ICAgICAgIGlzTmV3UmVkaXJlY3RGcm9tRW50cnkgPSB0cnVlOworICAgIH0KKworICAgIGlmIChp
c05ld1JlZGlyZWN0VG9FbnRyeSB8fCBpc05ld1JlZGlyZWN0RnJvbUVudHJ5KQorICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlv
biwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVyYWN0aW9uKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRl
bWVudC5iaW5kSW50KDEsIGhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgfHwgbV9tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmREb3VibGUoMiwgbW9zdFJlY2VudEludGVy
YWN0aW9uLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5iaW5kVGV4dCgzLCBkb21h
aW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25TdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24sIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBt
X21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVG9wRnJhbWVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgdHJ1ZSwgV2FsbFRp
bWU6Om5vdygpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdGFyZ2V0UmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWlu
KTsKKyAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKKworICAgIFNR
TGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
IkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21h
aW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHRhcmdldFJlc3VsdC5zZWNvbmQpKSk7CisgICAgaWYg
KHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBy
ZW1vdmVTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAobV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25T
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gISFtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCk7CisgICAgaWYgKCFoYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhtX2hhZFVzZXJJbnRlcmFjdGlvblN0
YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoMSkpOworCisgICAgaWYgKGhhc1N0YXRpc3RpY3NFeHBp
cmVkKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSkgeworICAgICAgICAvLyBEcm9wIHBy
aXZhY3kgc2Vuc2l0aXZlIGRhdGEgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICAg
ICAgLy8gU2V0IHRpbWVzdGFtcCB0byAwIHNvIHRoYXQgc3RhdGlzdGljcyBtZXJnZSB3aWxsIGtu
b3cKKyAgICAgICAgLy8gaXQgaGFzIGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMgZGVmYXVs
dCAtMS4KKyAgICAgICAgY2xlYXJVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgaGFk
VXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiBoYWRVc2Vy
SW50ZXJhY3Rpb247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4s
IFJlc291cmNlTG9hZFByZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50LmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31z
IiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGludCByZXNldFJl
c3VsdCA9IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworCisg
ICAgaWYgKG5ld1ByZXZhbGVuY2UgPT0gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gp
IHsKKyAgICAgICAgaWYgKG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmJp
bmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBtX3VwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRlVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1
bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgfQorCisgICAgU3RkU2V0PHVuc2ln
bmVkPiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7CisgICAgcmVjdXJzaXZlbHlGaW5k
Tm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGRvbWFpbklEKGRv
bWFpbiksIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgMCk7CisgICAgc2V0RG9tYWlu
c0FzUHJldmFsZW50KFdURk1vdmUobm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzKSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNB
c1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+JiYgZG9tYWlucykKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJ
dGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJlZ2luKCks
IGRvbWFpbnMuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERv
bWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdAor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUUoMTk1MDg4
KTogSW1wbGVtZW50IFNRTGl0ZS1iYXNlZCBkdW1waW5nIHJvdXRpbmVzLgorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCYgcHJlZGljYXRlU3RhdGVtZW50LCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IAorICAgIGlmIChwcmVkaWNhdGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcHJlZGljYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21h
aW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9ICEhcHJlZGlj
YXRlU3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBwcmVk
aWNhdGVTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCBy
ZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiht
X2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVGb3JEb21haW4obV9p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgZG9tYWluKTsKK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cywgZG9tYWluSUQoc3VicmVzb3VyY2VEb21h
aW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURv
bWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
bikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVy
biByZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMs
IGRvbWFpbklEKHN1YkZyYW1lRG9tYWluKSwgdG9wRnJhbWVEb21haW4pOworfQorCitib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9tYWluLCBj
b25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiByZWxhdGlvbnNoaXBF
eGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLCBkb21haW5JRChyZWRp
cmVjdGVkRnJvbURvbWFpbiksIHJlZGlyZWN0ZWRUb0RvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgCisgICAgaWYgKG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlLCBlcnJvciBt
ZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGludCByZXNldFJlc3VsdCA9IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09
IFNRTElURV9PSyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9v
bCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgCisg
ICAgaWYgKG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5iaW5kSW50KDEsIHZhbHVlKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LmJp
bmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBk
YXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LnJl
c2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FM
SVRFX09LKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRl
VmFsdWVGb3JEb21haW4obV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworCisgICAgLy8gRm9yIGNv
bnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3Ig
dGhlIHRvcCBmcmFtZSBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgcmVzdWx0LnNlY29uZCwgdG9w
RnJhbWVEb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VE
b21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJl
c291cmNlRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFs
c28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9t
YWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnMsIHJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwg
Y29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBG
b3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5
IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlc3VsdC5zZWNvbmQs
IHJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJl
Y3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1
YnJlc291cmNlRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdl
IGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisg
ICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3RE
b21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tLCByZXN1bHQuc2Vjb25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOworCisgICAgLy8gRm9yIGNvbnNpc3Rl
bmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJl
ZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAo
bV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLCByZXN1bHQuc2Vjb25kLCByZWRpcmVjdERvbWFp
bik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURv
bWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisKKyAgICAv
LyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVu
dHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVzdWx0LnNlY29u
ZCwgcmVkaXJlY3REb21haW4pOworfQorCitzdGQ6OnBhaXI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCB1bnNpZ25lZD4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1l
bnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgMCB9OworICAg
IH0KKyAgICAKKyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuc3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBtX2RvbWFpbklERnJv
bVN0cmluZ1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisKKyAgICAgICAgaW50IHJlc2V0UmVz
dWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAg
ICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCBkb21haW5JRCB9OworICAgIH0KKworICAgIGlu
dCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
KworICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9tYWluKTsKKyAg
ICBpbnNlcnRPYnNlcnZlZERvbWFpbihuZXdPYnNlcnZhdGlvbik7CisKKyAgICByZXR1cm4geyBB
ZGRlZFJlY29yZDo6WWVzLCBkb21haW5JRChkb21haW4pIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGNsZWFyT3BlcmF0aW5nRGF0ZXMoKTsKKworICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworCisgICAgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhbY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKKworICAgIGF1dG8gcHJpbWFy
eURvbWFpbnNUb0Jsb2NrID0gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7
CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKHByaW1hcnlEb21haW5zVG9CbG9j
aywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsg
fSk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpDb29raWVUcmVh
dG1lbnRSZXN1bHQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZVRy
ZWF0bWVudEZvck9yaWdpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhh
ZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ICIsIGRvbWFpbi5zdHJpbmcoKSkpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7
CisgICAgaWYgKCFpc1ByZXZhbGVudCkKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJl
c3VsdDo6QWxsb3c7CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CisgICAgcmV0dXJuIGhhZFVzZXJJbnRlcmFj
dGlvbiA/IENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwIDogQ29va2llVHJlYXRt
ZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOworfQorICAgIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFBy
b21wdCh1bnNpZ25lZCByZXF1ZXN0aW5nRG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBmaXJzdFBhcnR5RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEID0gZG9tYWluSUQoZmly
c3RQYXJ0eURvbWFpbik7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRv
cEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHJlcXVlc3Rp
bmdEb21haW5JRCksICIgQU5EIHRvcExldmVsRG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcihm
aXJzdFBhcnR5UHJpbWFyeURvbWFpbklEKSkpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhc3RhdGVtZW50LmdldENvbHVt
bkludCgwKTsKK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2soKSBjb25zdAoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBy
ZXN1bHRzOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVu
dCA9IDEiX3MpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKSkpOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9tYWluc1RvQmxvY2sgPSB0aGlzLT5k
b21haW5zVG9CbG9jaygpOworCisgICAgaWYgKGRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSAmJiAhZG9tYWluc1RvQmxvY2suaXNFbXB0eSgp
KQorICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoImJsb2NrIiwgZG9tYWluc1RvQmxv
Y2spOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBkb21haW5zVG9CbG9jayA9IGNy
b3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVw
ZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxv
Y2ssIFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYo
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbd2Vh
a1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtU
aGlzLT5kZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IkRvbmUgdXBkYXRpbmcgY29va2llIGJsb2NraW5nLiIpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCitWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OlByZXZhbGVudERvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpwcmV2YWxlbnREb21haW5zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBWZWN0b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcmVz
dWx0czsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
ZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAKKyAgICB3aGlsZSAo
c3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAg
ICAgICAgICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAs
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDIpKQor
ICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisg
ICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKKyAg
ICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCitWZWN0b3I8
dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJl
ZFVzZXJJbnRlcmFjdGlvbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiByZXN1bHRzOworICAgIE9wdGlvbmFsPFNlY29u
ZHM+IGV4cGlyYXRpb25EYXRlVGltZSA9IHN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCk7CisgICAg
aWYgKCFleHBpcmF0aW9uRGF0ZVRpbWUpCisgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAg
aWYgKG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBl
eHBpcmF0aW9uRGF0ZVRpbWUudmFsdWUoKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spCisgICAgICAg
IHJldHVybiByZXN1bHRzOworCisgICAgd2hpbGUgKG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rp
b25TdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsK
KworICAgIGludCByZXNldFJlc3VsdCA9IG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3Vs
dCA9PSBTUUxJVEVfT0spOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlv
bnMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBleHBp
cmVkUmVjb3JkcyA9IGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9ucygpOworICAgIGlmIChleHBp
cmVkUmVjb3Jkcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZXhwaXJl
ZFJlY29yZElEcyA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVk
Pjo6aXRlcmF0b3I+KGV4cGlyZWRSZWNvcmRzLmJlZ2luKCksIGV4cGlyZWRSZWNvcmRzLmVuZCgp
KSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24obV9kYXRh
YmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblRpbWUgPSAwLCBoYWRVc2VySW50ZXJhY3Rpb24gPSAxIFdIRVJFIGRvbWFp
bklEIElOICgiLCBleHBpcmVkUmVjb3JkSURzLCAiKSIpKTsKKyAgICBpZiAoY2xlYXJFeHBpcmVk
SW50ZXJhY3Rpb24ucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZVN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zICIsIGV4
cGlyZWRSZWNvcmRJRHMsICIpIikpOworICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjbGVhckV4cGly
ZWRJbnRlcmFjdGlvbi5zdGVwKCkgIT0gU1FMSVRFX0RPTkUKKyAgICAgICAgfHwgcmVtb3ZlU3Rv
cmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmxvZ1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJs
aWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYmIGRvbWFp
bklEc1RvQ2xlYXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBp
ZiAoZG9tYWluSURzVG9DbGVhci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNp
Z25lZD46Oml0ZXJhdG9yPihkb21haW5JRHNUb0NsZWFyLmJlZ2luKCksIGRvbWFpbklEc1RvQ2xl
YXIuZW5kKCkpKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhckdyYW5kZmF0aGVyaW5nU3Rh
dGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VU
IGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9DbGVhciwgIiki
KSk7CisgICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChjbGVhckdyYW5kZmF0aGVy
aW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtw
dWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlZ2lzdHJhYmxlRG9tYWluc1Rv
UmVtb3ZlV2Vic2l0ZURhdGFGb3IoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcCgpID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wgc2hvdWxkQ2xl
YXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYmIGVuZE9m
R3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKTsKKworICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0
aGVyaW5nKQorICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAoKTsKKwor
ICAgIGNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICAKKyAgICBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IHByZXZhbGVudFJlc291cmNlczsKKworICAgIFZlY3RvcjxQcmV2YWxl
bnREb21haW5EYXRhPiBwcmV2YWxlbnREb21haW5zID0gdGhpcy0+cHJldmFsZW50RG9tYWlucygp
OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nOwor
ICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogcHJldmFsZW50RG9tYWlucykgeworICAgICAgICBp
ZiAoIXN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gJiYgKCFzaG91bGRDaGVja0ZvckdyYW5k
ZmF0aGVyaW5nIHx8ICFzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgICAgICBwcmV2
YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RlcmFibGVEb21haW4pOworCisg
ICAgICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nICYmIHN0YXRpc3RpYy5ncmFuZGZh
dGhlcmVkKQorICAgICAgICAgICAgZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nLmFwcGVu
ZChzdGF0aXN0aWMuZG9tYWluSUQpOworICAgIH0KKworICAgIGNsZWFyR3JhbmRmYXRoZXJpbmco
V1RGTW92ZShkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmcpKTsKKyAgICAKKyAgICByZXR1
cm4gcHJldmFsZW50UmVzb3VyY2VzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgaWYgKG1f
b2JzZXJ2ZWREb21haW5Db3VudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgY291bnQg
PSBtX29ic2VydmVkRG9tYWluQ291bnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50IHJlc2V0
UmVzdWx0ID0gbV9vYnNlcnZlZERvbWFpbkNvdW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIGlmIChjb3Vu
dCA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvIDw9IHBhcmFtZXRl
cnMoKS5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisKKyAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVu
ZSA9IGNvdW50IC0gcGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbzsKKyAgICBBU1NFUlQo
Y291bnRMZWZ0VG9QcnVuZSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3Jkc1RvUHJ1bmUo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21h
aW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIERF
U0MgTElNSVQgIiwgU3RyaW5nOjpudW1iZXIoY291bnRMZWZ0VG9QcnVuZSkpKTsKKyAgICBpZiAo
cmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1
YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPHVu
c2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUuc3RlcCgp
ID09IFNRTElURV9ST1cpCisgICAgICAgIGVudHJpZXNUb1BydW5lLmFwcGVuZChyZWNvcmRzVG9Q
cnVuZS5nZXRDb2x1bW5JbnQoMCkpOworCisgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlz
dChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGVudHJpZXNU
b1BydW5lLmJlZ2luKCksIGVudHJpZXNUb1BydW5lLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgcHJ1bmVDb21tYW5kKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9i
c2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOwor
ICAgIGlmIChwcnVuZUNvbW1hbmQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBw
cnVuZUNvbW1hbmQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQuYmlu
ZERvdWJsZSgxLCBsYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LmJpbmRUZXh0KDIsIGRv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlTGFzdFNlZW5T
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1
cGRhdGVMYXN0U2VlbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1
bHQgPSBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oZG9tYWluKTsKKyAgICB1cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1l
Ojpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSkpOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
ZG9tYWluKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2U6OkhpZ2gpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGln
aCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIw
YmMzMmU1N2Q0NDg4YWIzZDM3NTg3NGY1NTBjZWNiOWE2NDBlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU1FMaXRlRGF0YWJh
c2U7CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7CitzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
czsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTsKKworLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8g
ZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0
aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUgZmlu
YWwgOiBwdWJsaWMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHsKK3B1YmxpYzoKKyAgICBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRo
KTsKKworICAgIHZvaWQgcG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlJik7CisKKyAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2Vz
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUlmTmVlZGVkKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJl
cXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
JiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBn
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
Jikgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihj
b25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJh
bWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlk
ZTsKKyAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
LCBib29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBT
dWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURv
bWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVj
dERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFn
ZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdl
SUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNj
ZXNzU3RhdHVzKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3Vi
RnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHVz
ZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0RvbWFp
biYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGJv
b2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92ZXJyaWRlOworICAgIHZvaWQgbG9n
U3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGVhclVzZXJJbnRlcmFj
dGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIGJvb2wgaGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcykgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpbnNlcnRPYnNlcnZlZERvbWFpbihjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBib29sIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmLCB1bnNpZ25lZCBkb21haW5J
RCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKTsKKyAgICBib29sIHJl
bGF0aW9uc2hpcEV4aXN0cyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmLCB1bnNpZ25lZCBmaXJz
dERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc2Vjb25kRG9tYWluKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBkb21haW5JRChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0Owor
I2lmbmRlZiBOREVCVUcKKyAgICBib29sIGNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3QoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyNlbmRpZgorICAgIHZvaWQgdXBkYXRlTGFzdFNl
ZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxsVGltZSk7CisgICAgdm9pZCBzZXRVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIGhhZFVzZXJJbnRlcmFj
dGlvbiwgV2FsbFRpbWUpOworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1Rv
QmxvY2soKSBjb25zdDsKKworICAgIHN0cnVjdCBQcmV2YWxlbnREb21haW5EYXRhIHsKKyAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQ7CisgICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdGVy
YWJsZURvbWFpbjsKKyAgICAgICAgV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWU7CisgICAgICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uOworICAgICAgICBib29sIGdyYW5k
ZmF0aGVyZWQ7CisgICAgfTsKKyAgICBWZWN0b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcHJldmFs
ZW50RG9tYWlucygpIGNvbnN0OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZmluZEV4cGlyZWRVc2Vy
SW50ZXJhY3Rpb25zKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rp
b25zKCk7CisgICAgdm9pZCBjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4mJik7
CisgICAgYm9vbCBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2ln
bmVkIGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIHZvaWQg
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsK
KyAgICBzdHJ1Y3QgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB7CisgICAgICAgIFJlZ2lzdHJh
YmxlRG9tYWluIHJlZ2lzdGVyYWJsZURvbWFpbjsKKyAgICAgICAgUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZSBwcmV2YWxlbmNlOworICAgICAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudDsKKyAgICAgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50OworICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQ7
CisgICAgfTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
PiBmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpOworCisgICAgYm9vbCBwcmVkaWNhdGVW
YWx1ZUZvckRvbWFpbihXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBDb29raWVUcmVhdG1lbnRSZXN1bHQg
eyBBbGxvdywgQmxvY2tBbmRLZWVwLCBCbG9ja0FuZFB1cmdlIH07CisgICAgQ29va2llVHJlYXRt
ZW50UmVzdWx0IGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKKyAgICB1bnNpZ25lZCBy
ZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21h
aW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxl
bnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOwor
ICAgIHZvaWQgc2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7CisgICAg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFt
ZURvbWFpbiYmLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRl
ZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAgdm9p
ZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOworICAgIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2Rl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSBvdmVycmlk
ZTsKKyAgICBlbnVtIGNsYXNzIEFkZGVkUmVjb3JkIHsgTm8sIFllcyB9OworICAgIHN0ZDo6cGFp
cjxBZGRlZFJlY29yZCwgdW5zaWduZWQ+IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkg
b3ZlcnJpZGU7CisgICAgYm9vbCBpc0RhdGFiYXNlU3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICBib29sIGNyZWF0ZVNjaGVtYSgpOworICAgIGJvb2wgcHJlcGFyZVN0
YXRlbWVudHMoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0
aDsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CisgICAg
bXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9vYnNlcnZlZERvbWFpbkNvdW50Owor
ICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVt
ZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2luc2VydFRvcExldmVsRG9tYWlu
U3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fZG9tYWlu
SURGcm9tU3RyaW5nU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIG11dGFibGUg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0
czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb207CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV90b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHM7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluczsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0czsKKyAgICBXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zOwor
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluRXhpc3RzOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzOworICAgIFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbTsKKyAgICBt
dXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbUV4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9tb3N0UmVjZW50
VXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBt
X3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50IG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQ7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9jbGVh
clByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7CisgICAgbXV0YWJs
ZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7Cisg
ICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9maW5kRXhwaXJlZFVzZXJJbnRl
cmFjdGlvblN0YXRlbWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSkgeyByZXR1cm4gc3RvcmUuaXNEYXRhYmFzZVN0b3Jl
KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCmluZGV4IDE3Y2E1
N2Y4ZjE0ZGFmYjc4YmE4YmNhZjBiMTJjYTkzZGI4NTAzYTguLjU4NjFkYmE3Yjc0YWM5OTllN2E3
Y2Q1ZTBjODgwNzliZTEzZmU0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCkBAIC00OSw5NCArNDksNiBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBjb25zdGV4cHIgdW5zaWduZWQgc3Rh
dGlzdGljc01vZGVsVmVyc2lvbiB7IDE1IH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVy
T2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OwotY29uc3RleHByIFNl
Y29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKLWNvbnN0
ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1jb25zdGV4cHIgdW5z
aWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAot
c3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiYgZG9tYWlucykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChh
dXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGRvbWFpbi5zdHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotY2xhc3MgT3BlcmF0aW5nRGF0ZSB7Ci1wdWJsaWM6Ci0g
ICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKLQotICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRl
IGZyb21XYWxsVGltZShXYWxsVGltZSB0aW1lKQotICAgIHsKLSAgICAgICAgZG91YmxlIG1zID0g
dGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICBpbnQgeWVh
ciA9IG1zVG9ZZWFyKG1zKTsKLSAgICAgICAgaW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIHll
YXIpOwotICAgICAgICBpbnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7Ci0gICAgICAgIGludCBtb250aERheSA9IGRheUluTW9udGhGcm9tRGF5
SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotCi0gICAgICAgIHJldHVybiBPcGVy
YXRpbmdEYXRlIHsgeWVhciwgbW9udGgsIG1vbnRoRGF5IH07Ci0gICAgfQotCi0gICAgc3RhdGlj
IE9wZXJhdGluZ0RhdGUgdG9kYXkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9wZXJhdGluZ0Rh
dGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkpOwotICAgIH0KLQotICAgIFNlY29uZHMg
c2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHMg
eyBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29u
ZHNQZXJEYXkgfTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5n
RGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9tb250aERheSA9PSBv
dGhlci5tX21vbnRoRGF5ICYmIG1fbW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0g
b3RoZXIubV95ZWFyOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGlu
Z0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVw
b2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250
aCwgaW50IG1vbnRoRGF5KQotICAgICAgICA6IG1feWVhcih5ZWFyKQotICAgICAgICAsIG1fbW9u
dGgobW9udGgpCi0gICAgICAgICwgbV9tb250aERheShtb250aERheSkKLSAgICB7IH0KLQotICAg
IGludCBtX3llYXIgeyAwIH07Ci0gICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCi0g
ICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCi19OwotCi1zdGF0aWMgVmVjdG9y
PE9wZXJhdGluZ0RhdGU+IG1lcmdlT3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGlu
Z0RhdGU+JiBleGlzdGluZ0RhdGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykK
LXsKLSAgICBpZiAoZXhpc3RpbmdEYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXVEZN
b3ZlKG5ld0RhdGVzKTsKLQotICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhl
eGlzdGluZ0RhdGVzLnNpemUoKSArIG5ld0RhdGVzLnNpemUoKSk7Ci0KLSAgICAvLyBNZXJnZSB0
aGUgdHdvIHNvcnRlZCB2ZWN0b3JzIG9mIGRhdGVzLgotICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdE
YXRlcy5iZWdpbigpLCBleGlzdGluZ0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdE
YXRlcy5lbmQoKSwgbWVyZ2VkRGF0ZXMuYmVnaW4oKSk7Ci0gICAgLy8gUmVtb3ZlIGR1cGxpY2F0
ZSBkYXRlcy4KLSAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKLQotICAg
IC8vIERyb3Agb2xkIGRhdGVzIHVudGlsIHRoZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGlu
Z0RhdGVzV2luZG93LgotICAgIHdoaWxlIChtZXJnZWREYXRlcy5zaXplKCkgPiBvcGVyYXRpbmdE
YXRlc1dpbmRvdykKLSAgICAgICAgbWVyZ2VkRGF0ZXMucmVtb3ZlKDApOwotCi0gICAgcmV0dXJu
IG1lcmdlZERhdGVzOwotfQogCiBzdHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKICAgICBSZWdp
c3RyYWJsZURvbWFpbiBkb21haW47CkBAIC0xNTUsMzYgKzY3LDI0IEBAIHN0YXRpYyB2b2lkIHBy
dW5lUmVzb3VyY2VzKEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+JiBzCiAgICAgICAgIHN0YXRpc3RpY3NNYXAucmVtb3ZlKHN0YXRpc3RpY3NUb1BydW5l
W2ldLmRvbWFpbik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICB1bnNp
Z25lZCBpbXBvcnRhbmNlID0gbWF4SW1wb3J0YW5jZTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlz
dGljLmlzUHJldmFsZW50UmVzb3VyY2UpCi0gICAgICAgIGltcG9ydGFuY2UgLT0gMTsKLSAgICBp
ZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgaW1wb3J0
YW5jZSAtPSAyOwotICAgIHJldHVybiBpbXBvcnRhbmNlOwotfQotCiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkK
LSAgICA6IG1fc3RvcmUoc3RvcmUpCi0gICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAg
OiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSkKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJl
Z2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKICNlbmRpZgotICAgIGluY2x1ZGVUb2RheUFz
T3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CiAKLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hB
ZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgIHdvcmtRdWV1
ZS5kaXNwYXRjaEFmdGVyKDVfcywgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CiAg
ICAgICAgIGlmICh3ZWFrVGhpcykKICAgICAgICAgICAgIHdlYWtUaGlzLT5jYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKTsKICAgICB9KTsKIH0KIAotUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKCkKK2Jvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuaXNFbXB0eSgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3Rl
bnRTdG9yYWdlJiBwZXJzaXN0ZW50U3RvcmFnZSkKQEAgLTE5Niw3OSArOTYsMTYgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVt
ZXRyeSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBp
ZiAobV9wYXJhbWV0ZXJzLnNob3VsZFN1Ym1pdFRlbGVtZXRyeSkKKyAgICBpZiAocGFyYW1ldGVy
cygpLnNob3VsZFN1Ym1pdFRlbGVtZXRyeSkKICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KCp0aGlzKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCA9IHZhbHVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBt
X3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkg
PSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJl
bW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVs
ZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKCFzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpKSB7Ci0gICAgICAgIGNhbGxi
YWNrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5jbGVhcigpOwotICAgIGZvciAoY29u
c3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdp
blByb2Nlc3NlcygpKQotICAgICAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5hZGQocGx1Z2luLT5w
bHVnaW5Qcm9jZXNzVG9rZW4oKSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gcHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zID0gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwot
ICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNh
bGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSB7CisgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAg
ICAgICsrc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKICAgICB9Ci0KLSNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKLSAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5h
YmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gcmVtb3ZlIGRhdGEg
cmVjb3JkcyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5zVG9TdHJpbmcocHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zKS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotCi0gICAgc2V0RGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQodHJ1ZSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZh
bGVudFJlc291cmNlRG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9
IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
LCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCldICgpIG11dGFibGUgewotICAgICAg
ICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgd2Vha1RoaXMtPm1fc3RvcmUuZGVsZXRlV2Vi
c2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIFdURk1v
dmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlz
ID0gV1RGTW92ZSh3ZWFrVGhpcyksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldKGNv
bnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRl
RGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFtkb21haW5z
V2l0aERlbGV0ZWRXZWJzaXRlRGF0YSA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zV2l0aERlbGV0
ZWRXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0g
V1RGTW92ZSh3ZWFrVGhpcyldICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGRvbWFpbiA6IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwotICAgICAgICAgICAgICAgICAgICAr
K3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5zZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2lu
Z0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgcmVtb3ZpbmcgZGF0
YSByZWNvcmRzLiIpOwotI2VuZGlmCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7CiB9CiAKIHVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVj
dXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPiYgZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdApAQCAtMzI5LDUzICsxNjYsNDAgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW4KIAogYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3Vy
Y2VTdGF0aXN0aWMpCiB7Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCisgICAgaWYgKCFk
ZWJ1Z01vZGVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBy
ZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiA9PSBtX2RlYnVnU3RhdGljUHJldmFs
ZW50UmVzb3VyY2UgfHwgcmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gbV9k
ZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlOworICAgIHJldHVybiByZXNvdXJjZVN0YXRpc3Rp
Yy5yZWdpc3RyYWJsZURvbWFpbiA9PSBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkgfHwg
cmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQogewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCkgewotICAgICAgICBm
b3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFs
dWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChpc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKHJlc291
cmNlU3RhdGlzdGljKSkKLSAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpIHsK
LSAgICAgICAgICAgICAgICBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVu
dChyZXNvdXJjZVN0YXRpc3RpYyk7Ci0gICAgICAgICAgICAgICAgYXV0byBjdXJyZW50UHJldmFs
ZW5jZSA9IHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgPyBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93OwotICAgICAg
ICAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXIuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNlU3RhdGlzdGljLCBj
dXJyZW50UHJldmFsZW5jZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0g
Y3VycmVudFByZXZhbGVuY2UpCi0gICAgICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291
cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQcmV2YWxlbmNlKTsKLSAgICAgICAgICAgIH0KKyAg
ICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
dmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUocmVzb3Vy
Y2VTdGF0aXN0aWMpKQorICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VT
dGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgICAgICBlbHNlIGlm
ICghcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3Rh
dGlzdGljKTsKKyAgICAgICAgICAgIGF1dG8gY3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0
YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGln
aCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdzsKKyAgICAgICAgICAgIGF1dG8gbmV3UHJl
dmFsZW5jZSA9IGNsYXNzaWZpZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3Vy
Y2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKKyAgICAgICAgICAgIGlmIChuZXdQcmV2
YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQorICAgICAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQcmV2YWxlbmNlKTsKICAgICAgICAgfQog
ICAgIH0KK30KIAotICAgIHJlbW92ZURhdGFSZWNvcmRzKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKG1fcGVyc2lzdGVu
dFN0b3JhZ2UpCi0gICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3Jp
dGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZv
cmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKLQotICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy5zaG91
bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKV0oKSB7Ci0gICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1
cm47Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJ
Zk5lZWRlZCgpCit7CisgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVy
c2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0
YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6Tm8pOworfQog
Ci0gICAgICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9jZXNz
ZWQoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpCit7CisgICAgaWYgKG1fcGVyc2lz
dGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0
ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9y
Y2VJbW1lZGlhdGVXcml0ZTo6WWVzKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1
YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFp
biYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwg
T3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIApAQCAtMzkwLDcgKzIxNCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURv
bWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbc3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlz
b2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxsSGFz
U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21h
aW4sIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRj
aChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0
XSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQp
OwpAQCAtMzk5LDE0ICsyMjMsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4KICAgICB9KTsK
IH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxl
RG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJ
RCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nl
c3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3Vi
RnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJh
bWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBhdXRvJiBzdWJGcmFtZVN0YXRp
c3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZy
YW1lRG9tYWluKTsKICAgICBpZiAoc2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoc3ViRnJhbWVT
dGF0aXN0aWMpKSB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0Vf
TE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBp
dHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFz
IG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1l
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
Q2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tp
ZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVj
ZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDE0LDcgKzIzOCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmCiAKICAgICBp
ZiAoIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoc3ViRnJhbWVTdGF0aXN0aWMpKSB7CiAjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1
Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJObyBuZWVkIHRv
IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJl
IG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiIsIHN1YkZyYW1lRG9tYWluLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVn
TG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0
byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFy
ZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOwogICAgICAgICByZXR1cm47CkBAIC00
MjMsMTMgKzI0NywxMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJgogICAgIGF1dG8gdXNlcldh
c1Byb21wdGVkRWFybGllciA9IHByb21wdEVuYWJsZWQgJiYgaGFzVXNlckdyYW50ZWRTdG9yYWdl
QWNjZXNzVGhyb3VnaFByb21wdChzdWJGcmFtZVN0YXRpc3RpYywgdG9wRnJhbWVEb21haW4pOwog
ICAgIGlmIChwcm9tcHRFbmFibGVkICYmICF1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CiAjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1
Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBh
c2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8g
JXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31zIG9yIG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVy
IHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHVuZGVyICV7
cHVibGljfXMgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OlJlcXVpcmVzVXNlclByb21w
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxp
ZXIpIHsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IlN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9
cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFp
bi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlN0b3Jh
Z2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cy4iLCBz
dWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgIH0KIApAQCAtNDQwLDcgKzI2NCw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmCiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFJl
Z2lzdHJhYmxlRG9tYWluJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBv
cGVuZXJQYWdlSUQsIFJlZ2lzdHJhYmxlRG9tYWluJiYgb3BlbmVyRG9tYWluKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJP
cGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzLCBPcGVuZXJQYWdlSUQgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJiBvcGVuZXJE
b21haW4pCiB7CiAgICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVu
ZXJEb21haW4pOwogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNDU2LDEyICsy
ODAsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUmVnaXN0cmEKICAgICAgICAgcmV0dXJuOwogCiAjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9n
Z2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29t
YmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31z
IHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9u
IGluIHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3Jh
Z2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVuZGVyIG9wZW5lciBwYWdlIGZy
b20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93
LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBv
cGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICBncmFudFN0
b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyks
IFdURk1vdmUob3BlbmVyRG9tYWluKSwgV1RGOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIGZhbHNl
LCBbXShib29sKSB7IH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21h
aW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQs
IHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYg
c3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTQ3Myw3ICsyOTcsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJlZ2lzdHJh
YmxlRG9tYWluJiYgcwogICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3Vi
RnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1
c2VyV2FzUHJvbXB0ZWROb3csIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0lu
dGVybmFsKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxlRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRf
dCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYg
c3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFs
PEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00ODMsMTQgKzMwNywxNCBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNz
SW50ZXJuYWwoUmVnaXN0cmFibGVEbwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9z
dG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdl
ciBleHBlcmltZW50YWwuCi0gICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBt
X3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCkgeworICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRO
b3dPckVhcmxpZXIgJiYgc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCkpIHsKICAgICAgICAg
YXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CiAgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pOwogICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0
aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1l
RG9tYWluKSk7CiAgICAgICAgIHN1YkZyYW1lU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOwogICAgIH0KIAotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHko
KSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJ
RCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdWJG
cmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFp
biA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHN0b3Jl
ID0gbWFrZVJlZihzdG9yZSgpKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKHN1YkZy
YW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCldKGJvb2wgdmFsdWUpIG11
dGFibGUgewogICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB2YWx1ZV0gKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICAgICAgY2FsbGJhY2sodmFsdWUpOwpAQCAtNDk5LDEwNSArMzIzLDM4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5h
bChSZWdpc3RyYWJsZURvCiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4mIGRvbWFpbnMpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBzaG91bGROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlS
ZWYoKSwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3Rv
cmUtPnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBzaG91bGROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYo
KV0gKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdU
Rk1vdmUod2Vha1RoaXMpLCBkb21haW5zV2l0aFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5
KGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnNXaXRoV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGlj
ID0gd2Vha1RoaXMtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpub3coKSArIHdlYWtUaGlzLT5t
X3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lOwotICAgICAgICAgICAgICAgIGlmICh3ZWFr
VGhpcy0+bV9wZXJzaXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAgICAgICAgICAgd2Vha1RoaXMt
Pm1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVz
KTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5sb2dUZXN0aW5nRXZlbnQoIkdyYW5kZmF0aGVyZWQiX3MpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewor
ICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOworICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9
IHRydWU7CisgICAgfQogfQogCiBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdN
b2RlKCkKIHsKLSAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICBpZiAoIWRlYnVnTW9k
ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gZG9tYWluc1RvQmxvY2s7CiAgICAgZG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSgyKTsKIAotICAgIGF1dG8mIHN0YXRpY1Nlc291cmNlU3RhdGlzdGljID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4obV9kZWJ1Z1N0YXRpY1By
ZXZhbGVudFJlc291cmNlKTsKKyAgICBhdXRvJiBzdGF0aWNTZXNvdXJjZVN0YXRpc3RpYyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJl
dmFsZW50UmVzb3VyY2UoKSk7CiAgICAgc2V0UHJldmFsZW50UmVzb3VyY2Uoc3RhdGljU2Vzb3Vy
Y2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotICAgIGRvbWFpbnNU
b0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOwor
ICAgIGRvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlKCkpOwogCi0gICAgaWYgKCFtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlzdGljID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4obV9kZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKyAgICBpZiAoIWRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byYgbWFudWFsUmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKCkpOwogICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShtYW51YWxSZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgIGRv
bWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UpOworICAgICAgICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZSgpKTsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAg
UkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7
cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERl
YnVnIE1vZGUuIiwgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkRpZCBzZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRo
ZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICB9CiAgICAgCiAgICAg
cmV0dXJuIGRvbWFpbnNUb0Jsb2NrOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJs
ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAotICAgIGlmIChlbmFibGUpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiVHVybmVkIElUUCBEZWJ1ZyBNb2RlIG9uLiIpOwot
I2VuZGlmCi0KLSAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7Ci0gICAgbV9kZWJ1Z0xv
Z2dpbmdFbmFibGVkID0gZW5hYmxlOwotCi0gICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9y
RGVidWdNb2RlKCk7Ci0gICAgLy8gVGhpcyB3aWxsIGxvZyB0aGUgY3VycmVudCBjb29raWUgYmxv
Y2tpbmcgc3RhdGUuCi0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tp
bmcoW10oKSB7IH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGRvbWFpbikKLXsKLSAgICBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBkb21h
aW47Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5n
UmVxdWVzdElkZW50aWZpZXIgPSArK21fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXI7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIobWluaW11bVN0YXRpc3Rp
Y3NQcm9jZXNzaW5nSW50ZXJ2YWwsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICptX3BlbmRpbmdTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyXSB7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFtX3BlbmRpbmdTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHx8ICptX3BlbmRpbmdTdGF0aXN0aWNzUHJv
Y2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyICE9IHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXIpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCBoYXMgYmVlbiBjYW5jZWxl
ZC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICAgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVj
b3JkcygpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJv
Y2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0OwotfQotCiB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgYm9v
bCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwpAQCAtNjM1LDcgKzM5Miw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21hCiAg
ICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsK
IH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291
cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGlu
Zyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBUb3BGcmFtZURv
bWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC02NDUsNyArNDAyLDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdp
c3RyYWJsZUQKICAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5l
Y2Vzc2FyeSgpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluKQordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3Qg
UmVkaXJlY3RlZEZyb21Eb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9t
YWluJiB0YXJnZXREb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTY1OCw3ICs0MTUsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZQogICAgICAgICBzY2hl
ZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mIGRv
bWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzI4LDcgKzQ4
NSw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuaXNQ
cmV2YWxlbnRSZXNvdXJjZSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2U7CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291
cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03MzYsNyArNDkzLDcgQEAgYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihjb25zdCBSZWcKICAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1lRG9tYWluKTsKIH0KIAotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVE
b21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc0NCw3
ICs1MDEsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdp
c3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIHJldHVybiBtYXBFbnRyeSA9
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVl
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnModG9wRnJhbWVEb21haW4pOwog
fQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdGVkRnJvbURv
bWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QK
K2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9t
YWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzc3LDcgKzUzNCw3IEBA
IGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0dyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuZ3JhbmRmYXRo
ZXJlZDsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJh
bWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BG
cmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTc4Nyw3ICs1NDQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFJlZwogICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9t
YWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3Vi
cmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc5Nyw3ICs1NTQsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0CiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4odG9wRnJhbWVEb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJl
ZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3Vi
cmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODA3LDcgKzU2NCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgUmVnCiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJl
Y3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgxNyw3
ICs1NzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUgogICAgIGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21h
aW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgyNyw3ICs1ODQs
NyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdAogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9t
YWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWlu
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04MzcsOTUgKzU5NCw2
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpCiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihT
ZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
QVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNv
bmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNT
RVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwgPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25k
cykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25k
cyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZSA9IHNlY29u
ZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRDYWNo
ZU1heEFnZUNhcChTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5j
YWNoZU1heEFnZUNhcFRpbWUgPSBzZWNvbmRzOwotICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDYWNo
ZU1heEFnZUNhcCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0g
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNl
Y29uZHMgPSBtX3BhcmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lXSAoKSB7Ci0gICAgICAgIHN0
b3JlLT5zZXRDYWNoZU1heEFnZUNhcChzZWNvbmRzLCBbXSB7IH0pOwotICAgIH0pOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50
U2lkZUNvb2tpZXMoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0gICAgCi0gICAgbV9wYXJhbWV0
ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSA9IHNlY29uZHM7Ci0gICAgdXBkYXRlQ2xp
ZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCkKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9z
dG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1l
XSAoKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHN0b3JlLT5uZXR3b3Jr
U2Vzc2lvbigpKQotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpLnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKHNlY29uZHMpOwotICAgIH0pOwot
I2VuZGlmCi19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgZm9yIChj
b25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1
Z2luUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFtX2FjdGl2ZVBsdWdpblRva2Vucy5jb250
YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuICFtX2xhc3RUaW1lRGF0YVJlY29yZHNX
ZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+PSAobV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkID0gdmFs
dWU7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0gICAgICAgIG1fbGFzdFRp
bWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KIFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
QEAgLTk0MSwxMyArNjA5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y3JlYXRlRW5jb2RlckZyCiAKICAgICBhdXRv
IGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIoKTsKICAgICBlbmNvZGVyLT5lbmNvZGVV
SW50MzIoInZlcnNpb24iLCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uKTsKLSAgICBlbmNvZGVyLT5l
bmNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBtX2VuZE9mR3JhbmRm
YXRoZXJpbmdUaW1lc3RhbXAuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICBlbmNv
ZGVyLT5lbmNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBlbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKIAog
ICAgIGVuY29kZXItPmVuY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmJlZ2luKCksIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpLCBb
XShLZXllZEVuY29kZXImIGVuY29kZXJJbm5lciwgY29uc3QgYXV0byYgZG9tYWluKSB7CiAgICAg
ICAgIGRvbWFpbi52YWx1ZS5lbmNvZGUoZW5jb2RlcklubmVyKTsKICAgICB9KTsKIAotICAgIGVu
Y29kZXItPmVuY29kZU9iamVjdHMoIm9wZXJhdGluZ0RhdGVzIiwgbV9vcGVyYXRpbmdEYXRlcy5i
ZWdpbigpLCBtX29wZXJhdGluZ0RhdGVzLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJ
bm5lciwgT3BlcmF0aW5nRGF0ZSBkYXRlKSB7CisgICAgYXV0byYgb3BlcmF0aW5nRGF0ZXMgPSB0
aGlzLT5vcGVyYXRpbmdEYXRlcygpOworICAgIGVuY29kZXItPmVuY29kZU9iamVjdHMoIm9wZXJh
dGluZ0RhdGVzIiwgb3BlcmF0aW5nRGF0ZXMuYmVnaW4oKSwgb3BlcmF0aW5nRGF0ZXMuZW5kKCks
IFtdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBPcGVyYXRpbmdEYXRlIGRhdGUpIHsKICAg
ICAgICAgZW5jb2RlcklubmVyLmVuY29kZURvdWJsZSgiZGF0ZSIsIGRhdGUuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKTsKICAgICB9KTsKIApAQCAtOTY5LDkgKzYzOCw5IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVdpdGhEYXRhRnJvbURlY29kZXIo
S2V5ZWREZWNvZGVyJiBkCiAKICAgICBkb3VibGUgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFt
cDsKICAgICBpZiAoZGVjb2Rlci5kZWNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1l
c3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKSkKLSAgICAgICAgbV9lbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGVuZE9mR3Jh
bmRmYXRoZXJpbmdUaW1lc3RhbXApOworICAgICAgICBzZXRFbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wKFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0
YW1wKSk7CiAgICAgZWxzZQotICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PSB7IH07CisgICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwogCiAg
ICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IGxvYWRlZFN0YXRpc3RpY3M7CiAgICAg
Ym9vbCBzdWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGlj
cyIsIGxvYWRlZFN0YXRpc3RpY3MsIFt2ZXJzaW9uT25EaXNrXShLZXllZERlY29kZXImIGRlY29k
ZXJJbm5lciwgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgewpAQCAtOTk3LDcg
KzY2Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVdp
dGhEYXRhRnJvbURlY29kZXIoS2V5ZWREZWNvZGVyJiBkCiAgICAgaWYgKCFzdWNjZWVkZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fb3BlcmF0aW5nRGF0ZXMgPSBtZXJnZU9wZXJhdGluZ0Rh
dGVzKG1fb3BlcmF0aW5nRGF0ZXMsIFdURk1vdmUob3BlcmF0aW5nRGF0ZXMpKTsKKyAgICBtZXJn
ZU9wZXJhdGluZ0RhdGVzKFdURk1vdmUob3BlcmF0aW5nRGF0ZXMpKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEwMDUsNyArNjc0LDcgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGUKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgbV9vcGVyYXRpbmdEYXRlcy5jbGVh
cigpOworICAgIGNsZWFyT3BlcmF0aW5nRGF0ZXMoKTsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCkBAIC0xMDU2LDM5ICs3MjUsNiBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdAog
ICAgIHJldHVybiBzdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLmNv
bnRhaW5zKGZpcnN0UGFydHlEb21haW4pOwogfQogCi1zdGF0aWMgdm9pZCBkZWJ1Z0xvZ0RvbWFp
bnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+JiBkb21haW5zKQotewotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIHN0YXRp
YyBjb25zdCBhdXRvIG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50ID0gNTA7Ci0g
ICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZG9t
YWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKLSAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91
dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yOiAle3B1
YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURv
bWFpbj4gYmF0Y2g7Ci0gICAgYmF0Y2gucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJP
ZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7Ci0gICAgYXV0byBiYXRjaE51bWJlciA9IDE7Ci0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0gc3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7
Ci0KLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKGJhdGNo
LnNpemUoKSA9PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91
dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1
YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJP
ZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBiYXRjaC5zaHJpbmsoMCk7Ci0gICAgICAgICAgICArK2JhdGNoTnVtYmVyOwotICAgICAg
ICB9Ci0gICAgICAgIGJhdGNoLmFwcGVuZChkb21haW4pOwotICAgIH0KLSAgICBpZiAoIWJhdGNo
LmlzRW1wdHkoKSkKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29u
dGV4dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNo
TnVtYmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRh
dGEoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhY3Rpb24pOwotICAgIFVOVVNFRF9QQVJB
TShkb21haW5zKTsKLSNlbmRpZgotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpA
QCAtMTEwNCw1MiArNzQwLDIzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICYmICFkb21haW5z
VG9CbG9jay5pc0VtcHR5KCkpCisgICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSAmJiAhZG9t
YWluc1RvQmxvY2suaXNFbXB0eSgpKQogICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMo
ImJsb2NrIiwgZG9tYWluc1RvQmxvY2spOwogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVh
ZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2
YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBbd2Vh
a1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0g
V1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5kZWJ1Z0xvZ2dpbmdF
bmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgdXBkYXRpbmcgY29v
a2llIGJsb2NraW5nLiIpOwogI2VuZGlmCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRh
dGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9C
bG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBzdG9y
ZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9t
YWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHN0
b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5z
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpXSB7Ci0gICAgICAgIHN0b3JlLT5j
YWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoZG9tYWlucyk7Ci0gICAgfSk7Ci0KLSAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJik+JiBwcm9jZXNzRnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CkBAIC0xMTc4LDExICs3ODUsMTEgQEAgVmVjdG9yPFJlZ2lzdHJh
YmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdHJhYmxl
RG9tYWluc1QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGJvb2wg
c2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcCA+IFdhbGxUaW1lOjpub3coKTsKLSAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJp
bmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiBtX2VuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXA7CisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wg
c2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
ICYmIGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKTsKIAogICAgIGlmIChzaG91bGRDbGVh
ckdyYW5kZmF0aGVyaW5nKQotICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PSB7IH07CisgICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwogCiAg
ICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBwcmV2YWxlbnRSZXNvdXJjZXM7CiAgICAgZm9y
IChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewpA
QCAtMTE5Niw2MiArODAzLDE2IEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUCiAgICAgcmV0dXJu
IHByZXZhbGVudFJlc291cmNlczsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gdG9kYXkgPSBPcGVyYXRp
bmdEYXRlOjp0b2RheSgpOwotICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0VtcHR5KCkgJiYg
dG9kYXkgPD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHdoaWxlIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykK
LSAgICAgICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7Ci0KLSAgICBtX29wZXJhdGluZ0Rh
dGVzLmFwcGVuZCh0b2RheSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRl
c1dpbmRvdykgewotICAgICAgICBpZiAoT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKHJlc291
cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8IG1fb3BlcmF0aW5n
RGF0ZXMuZmlyc3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlz
dGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1h
aW5seSBmb3IgdGVzdGluZykuCi0gICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKSB7Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiByZXNvdXJjZVN0YXRp
c3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5
Q291bnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFt
ZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlDb3VudDsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25U
byhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8gPSBwcnVuZVRhcmdl
dENvdW50OwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJ1
bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSA8PSBtX3BhcmFtZXRl
cnMubWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LnNpemUoKSA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVChtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvIDw9IG1f
cGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisgICAgQVNTRVJUKHBhcmFtZXRlcnMo
KS5wcnVuZUVudHJpZXNEb3duVG8gPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVz
KTsKIAotICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnNpemUoKSAtIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG87Cisg
ICAgc2l6ZV90IG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuc2l6ZSgpIC0gcGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbzsKICAgICBBU1NF
UlQobnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOwogCiAgICAgVmVjdG9yPFN0YXRpc3RpY3NM
YXN0U2Vlbj4gcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbbWF4SW1wb3J0YW5jZSArIDFd
OwpAQCAtMTI2NCwyMiArODI1LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKICAgICBBU1NFUlQoIW51bWJlck9mRW50
cmllc0xlZnRUb1BydW5lKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMgPSB7IH07Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBldmVu
dCA9IGV2ZW50Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZl
bnQoZXZlbnQpOwotICAgIH0pOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vj
b25kcyBzZWNvbmRzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTMw
NCwyNyArODQ5LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWIKICAgICBzZXRQcmV2YWxlbnRS
ZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhp
Z2gpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVtb3Zl
QWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0
b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOwotICAgIHVwZGF0
ZUNhY2hlTWF4QWdlQ2FwKCk7Ci0gICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCmluZGV4IGUzMTE3N2ExMmE5ODI4Nzdh
MDBlYjA2NDQ2MzE5YzMzYWNmMTliMzcuLmNhMWQ5MmFkZWNjMGM0ZDUwZTdlOWNkMzQyZDU2ZDE0
MWM1YTBmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNywxNyArMjcsMTMgQEAKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
ci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAotI2lmIEhBVkUoQ09SRV9QUkVE
SUNUSU9OKQotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2Eu
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBLZXllZERlY29kZXI7CiBj
bGFzcyBLZXllZEVuY29kZXI7CkBAIC00NiwzNSArNDIsMTkgQEAgc3RydWN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBPcGVyYXRpbmdEYXRl
OwogY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOwogCiAvLyBU
aGlzIGlzIGFsd2F5cyBjb25zdHJ1Y3RlZCAvIHVzZWQgLyBkZXN0cm95ZWQgb24gdGhlIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSdzIHN0YXRpc3RpY3MgcXVldWUuCi1jbGFzcyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPiB7CitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIHsKIHB1YmxpYzoKLSAgICB1c2luZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFRvcEZyYW1lRG9tYWluID0g
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgU3ViRnJhbWVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBTdWJSZXNvdXJjZURvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0RG9tYWluID0g
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3RlZEZyb21Eb21h
aW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVjdGVkVG9E
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBOYXZpZ2F0ZWRG
cm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgTmF2aWdh
dGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBEb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAg
ICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1
c2luZyBPcGVuZXJQYWdlSUQgPSB1aW50NjRfdDsKLSAgICB1c2luZyBQYWdlSUQgPSB1aW50NjRf
dDsKLSAgICB1c2luZyBGcmFtZUlEID0gdWludDY0X3Q7Ci0KICAgICBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1
ZXVlJik7Ci0gICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgpOwogCiAgICAg
dm9pZCBzZXRQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UmKTsKIAotICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBjb25zdCBIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
OyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWRFbmNvZGVyPiBjcmVhdGVF
bmNvZGVyRnJvbURhdGEoKSBjb25zdDsKICAgICB2b2lkIG1lcmdlV2l0aERhdGFGcm9tRGVjb2Rl
cihXZWJDb3JlOjpLZXllZERlY29kZXImKTsKQEAgLTgyLDE0NyArNjIsODEgQEAgcHVibGljOgog
ICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYm
KTsKICAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0OwogCi0gICAgdm9pZCB1cGRhdGVDb29r
aWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgdXBkYXRl
Q29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4m
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2xlYXJCbG9ja2luZ1N0
YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdE
YXRlSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMoKTsKLQotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgT3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJik7Ci0g
ICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7Ci0KLSAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdCgpOworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mKSBjb25zdDsKLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25z
dCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7Ci0gICAgYm9v
bCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4m
LCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdDsKKyAgICB2b2lkIGNsYXNzaWZ5UHJl
dmFsZW50UmVzb3VyY2VzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUlmTmVlZGVk
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mKTsKLSAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdDsKLSAg
ICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRv
bWFpbiYmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpOwotICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBncmFuZGZhdGhlckRhdGFG
b3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwg
Y29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0gICAg
dm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYs
IGNvbnN0IFJlZGlyZWN0RG9tYWluJik7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVk
RnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBjbGVh
clByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7Cisg
ICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291
bnQpOwotICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENv
dW50KTsKLSAgICB2b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgIHZv
aWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUp
IG92ZXJyaWRlOworICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVt
ZXRyeSgpIGNvbnN0OworICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25z
dCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERv
bWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAgICB2b2lkIHNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwotICAgIHZv
aWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwotICAgIHZvaWQgc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKLSAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5n
VGltZShTZWNvbmRzKTsKLSAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoYm9vbCk7Ci0gICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X2RlYnVnTW9kZUVuYWJsZWQ7IH07Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgY2FsY3VsYXRlQW5k
U3VibWl0VGVsZW1ldHJ5KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGhhc1N0b3JhZ2VB
Y2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlv
bmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwot
ICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVE
b21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOwotICAgIHZvaWQgZ3JhbnRTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBh
Z2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpOworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYs
IGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQ
YWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdl
QWNjZXNzU3RhdHVzKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3Mo
U3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29s
IHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0Rv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYs
IGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSk7Ci0gICAgdm9pZCBsb2dVc2VySW50
ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLSAgICB2b2lkIGxvZ1N1YnJlc291cmNl
TG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwg
V2FsbFRpbWUgbGFzdFNlZW4pOwotICAgIHZvaWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25z
dCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpOworICAg
IHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGly
ZWN0LCBib29sIGlzTWFpbkZyYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFj
dGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgbG9nU3VicmVz
b3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mLCBXYWxsVGltZSBsYXN0U2Vlbikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dTdWJyZXNvdXJj
ZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRv
RG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNIYWRVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKIAotICAgIHZvaWQg
c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKTsKLQotICAgIHZv
aWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgIGNvbnN0IFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3N0b3JlOyB9CisgICAg
dm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNlY29uZHMpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHNob3VsZEJsb2NrQW5kS2VlcENvb2tp
ZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHN0YXRpYyBib29sIHNob3Vs
ZEJsb2NrQW5kUHVyZ2VDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAg
ICBzdGF0aWMgYm9vbCBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KGNv
bnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwog
ICAgIGJvb2wgaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKSBjb25zdDsKLSAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKICAgICBib29sIHdhc0FjY2Vzc2VkQXNG
aXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgY3VycmVudCwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgdXBkYXRlZCkgY29uc3Q7
CisgICAgdm9pZCBpbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFByZXZhbGVudFJl
c291cmNlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsK
ICAgICB1bnNpZ25lZCByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRU
b1RoaXNEb21haW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIEhhc2hTZXQ8UmVkaXJl
Y3RlZFRvRG9tYWluPiYsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpIGNvbnN0Owot
ICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBt
X3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCAgPSBlbmFibGVkOyB9Ci0gICAgYm9vbCBzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVidWdMb2dnZ2luZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVidWdMb2dnaW5nRW5hYmxlZCAgPSBlbmFibGVkOyB9
Ci0gICAgdm9pZCBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sKTsKLSAgICB2b2lkIHNj
aGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKICAgICB2b2lk
IGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9t
YWluJiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIG1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKTsKICAgICBib29sIGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYpOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFs
ZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKSBvdmVycmlkZTsKICAgICB2
b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAg
dm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5z
VG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwotICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAoU2Vj
b25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHZvaWQgc2V0QWdl
Q2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDbGllbnRT
aWRlQ29va2llc0FnZUNhcCgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCByZWdp
c3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7Ci0jZW5kaWYKKyAgICBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKSBvdmVy
cmlkZTsKKyAgICBib29sIGlzTWVtb3J5U3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisKIAotICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKLSAgICAgICAgc2l6ZV90IHBydW5lRW50
cmllc0Rvd25UbyB7IDgwMCB9OwotICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJpZXMg
eyAxMDAwIH07Ci0gICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb247Ci0gICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsIHsgMV9oIH07Ci0gICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRfaCAq
IDcgfTsKLSAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9Owot
ICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07
Ci0gICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkU3VibWl0VGVs
ZW1ldHJ5IHsgdHJ1ZSB9OwotICAgIH07Ci0KLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmIG1fc3RvcmU7Ci0gICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAgICAgV2Vh
a1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVu
dFN0b3JhZ2U7CiAgICAgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFpbiwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7Ci0jaWYgSEFWRShDT1JFX1BSRURJQ1RJ
T04pCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOwotI2Vsc2UKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xhc3NpZmllciBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOwotI2VuZGlm
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgSGFzaFNldDx1aW50NjRfdD4g
bV9hY3RpdmVQbHVnaW5Ub2tlbnM7Ci0jZW5kaWYKLSAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVy
czsKLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsKLSAgICBXYWxs
VGltZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7Ci0gICAgYm9vbCBtX2RlYnVnTG9n
Z2luZ0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsgZmFs
c2UgfTsKLSAgICBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGljUHJldmFsZW50
UmVzb3VyY2UgeyBVUkwgeyBVUkwoKSwgImh0dHBzOi8vM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyJf
cyB9IH07Ci0gICAgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlOwotICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNlIH07Ci0gICAgTW9ub3Rv
bmljVGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZDsKLQotICAgIHVpbnQ2NF90
IG1fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgeyAwIH07Ci0gICAg
T3B0aW9uYWw8dWludDY0X3Q+IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSkK
KyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmIHN0b3JlKSB7IHJldHVybiBzdG9yZS5pc01lbW9yeVN0b3JlKCk7IH0KK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmOTIzMjQ1NWY2NWVjODY4ODQzN2Fj
MTc4MzJiODBiZDBiZjczNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAt
MCwwICsxLDU3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKworI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29y
a1Nlc3Npb24uaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgorI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
PgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvRGF0
ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5n
SW50ZXJ2YWwgeyA1X3MgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRv
dyB7IDMwIH07CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK3N0YXRpYyBTdHJpbmcgZG9t
YWluc1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWlucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW4u
c3RyaW5nKCkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorI2Vu
ZGlmCisKK09wZXJhdGluZ0RhdGUgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1l
IHRpbWUpCit7CisgICAgZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxp
c2Vjb25kcygpOworICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOworICAgIGludCB5ZWFyRGF5
ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBpbnQgbW9udGggPSBtb250aEZyb21EYXlJblll
YXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7CisgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5N
b250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7CisKKyAgICByZXR1
cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OworfQorCitPcGVyYXRp
bmdEYXRlIE9wZXJhdGluZ0RhdGU6OnRvZGF5KCkKK3sKKyAgICByZXR1cm4gT3BlcmF0aW5nRGF0
ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpub3coKSk7Cit9CisKK1NlY29uZHMgT3BlcmF0aW5n
RGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdAoreworICAgIHJldHVybiBTZWNvbmRzIHsg
ZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBzZWNvbmRz
UGVyRGF5IH07Cit9CisKK2Jvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PShjb25zdCBPcGVy
YXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb250aERheSA9PSBvdGhl
ci5tX21vbnRoRGF5ICYmIG1fbW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0gb3Ro
ZXIubV95ZWFyOworfQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPChjb25zdCBPcGVy
YXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2go
KSA8IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Cit9CisKK2Jvb2wgT3BlcmF0aW5nRGF0ZTo6
b3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOworfQor
CitSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtR
dWV1ZSkKKyAgICA6IG1fc3RvcmUoc3RvcmUpCisgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpbmNsdWRlVG9kYXlB
c09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworfQorCitSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291
cmNlU3RhdGlzdGljKQoreworICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1heEltcG9ydGFuY2U7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3Rp
Yy5pc1ByZXZhbGVudFJlc291cmNlKQorICAgICAgICBpbXBvcnRhbmNlIC09IDE7CisgICAgaWYg
KCFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIGltcG9ydGFu
Y2UgLT0gMjsKKyAgICByZXR1cm4gaW1wb3J0YW5jZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3Bh
cmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IHZh
bHVlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB2YWx1ZTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShi
b29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcGFy
YW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgeworICAgICAgICBjYWxsYmFj
aygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCisgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Q
cm9jZXNzZXMoKSkKKyAgICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuYWRkKHBsdWdpbi0+cGx1
Z2luUHJvY2Vzc1Rva2VuKCkpOworI2VuZGlmCisKKyAgICBhdXRvIHByZXZhbGVudFJlc291cmNl
RG9tYWlucyA9IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAg
ICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9y
ICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZhbGVudFJlc291cmNlRG9tYWlucyku
dXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKworICAgIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVk
KHRydWUpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyks
IHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRl
cnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVl
ID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykgeworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHdlYWtUaGlzLT5tX3N0b3JlLmRlbGV0ZVdlYnNpdGVEYXRhRm9y
UmVnaXN0cmFibGVEb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBXVEZNb3ZlKHByZXZhbGVu
dFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXShjb25zdCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFi
bGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbZG9tYWluc1dpdGhEZWxldGVk
V2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURh
dGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vh
a1RoaXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmluY3JlbWVu
dFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKFdURk1vdmUoZG9tYWluc1dpdGhEZWxldGVk
V2Vic2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c2V0RGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3
ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJEb25lIHJlbW92aW5nIGRhdGEgcmVjb3Jkcy4iKTsKKyNlbmRpZgorICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKQorICAgICAgICBjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpOworICAgIAorICAgIHJlbW92ZURhdGFSZWNvcmRzKFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7CisgICAgICAg
IHN5bmNTdG9yYWdlSWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy5zaG91
bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKV0geworICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9j
ZXNzZWQoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5j
b3B5UmVmKCksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IHN0b3JlLT5yZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5
UmVmKCldIChIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpIG11dGFibGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmdyYW5kZmF0aGVy
RGF0YUZvckRvbWFpbnMoZG9tYWluc1dpdGhXZWJzaXRlRGF0YSk7CisgICAgICAgICAgICAgICAg
d2Vha1RoaXMtPm1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpub3co
KSArIHdlYWtUaGlzLT5tX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lOworICAgICAgICAg
ICAgICAgIHdlYWtUaGlzLT5zeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCk7CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bG9nVGVzdGluZ0V2ZW50
KCJHcmFuZGZhdGhlcmVkIl9zKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoZW5hYmxl
KQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IlR1cm5lZCBJVFAgRGVidWcgTW9kZSBvbi4iKTsKKyNlbmRpZgorCisgICAgbV9kZWJ1Z01vZGVF
bmFibGVkID0gZW5hYmxlOworICAgIG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKKwor
ICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIC8vIFRoaXMg
d2lsbCBsb2cgdGhlIGN1cnJlbnQgY29va2llIGJsb2NraW5nIHN0YXRlLgorICAgIGlmIChlbmFi
bGUpCisgICAgICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgbV9kZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlID0gZG9tYWluOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2Fy
eSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BlbmRpbmdT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKyttX2xhc3RTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFm
dGVyKG1pbmltdW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgPSAqbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcl0gewor
ICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICghbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB8fCAqbV9w
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciAhPSBzdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIHJlcXVl
c3QgaGFzIGJlZW4gY2FuY2VsZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7CisgICAgICAgIHByb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3QoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5n
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9IFdURjo6bnVsbG9wdDsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMudGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
U2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMg
Pj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRz
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VD
YXAoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMuY2FjaGVNYXhB
Z2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJh
bWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZV0gKCkgeworICAgICAgICBzdG9yZS0+c2V0Q2FjaGVN
YXhBZ2VDYXAoc2Vjb25kcywgW10geyB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMg
c2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQo
c2Vjb25kcyA+PSAwX3MpOworICAgIAorICAgIG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2ll
c0FnZUNhcFRpbWUgPSBzZWNvbmRzOworICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2Fw
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDbGllbnRT
aWRlQ29va2llc0FnZUNhcCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0
ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZV0gKCkgeworICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Nlc3Npb24gPSBzdG9yZS0+bmV0d29ya1Nlc3Npb24oKSkKKyAgICAgICAgICAgIG5l
dHdvcmtTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zZXRBZ2VDYXBGb3JDbGllbnRT
aWRlQ29va2llcyhzZWNvbmRzKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdAorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fZGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vz
c01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKSB7CisgICAgICAgIGlmICgh
bV9hY3RpdmVQbHVnaW5Ub2tlbnMuY29udGFpbnMocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4o
KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVy
biAhbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgfHwgTW9ub3RvbmljVGltZTo6bm93
KCkgPj0gKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsgbV9wYXJhbWV0ZXJzLm1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sIHZhbHVl
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9kYXRhUmVjb3Jk
c0JlaW5nUmVtb3ZlZCA9IHZhbHVlOworICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVk
KQorICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRl
Q29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4m
IGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNU
b0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0
b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihk
b21haW5zVG9CbG9jaywgW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAg
c3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisgICAgCisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckJsb2Nr
aW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFp
bnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChkb21haW5zLmlzRW1wdHko
KSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9y
ZSksIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlucyldIHsKKyAgICAgICAgc3RvcmUt
PmNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihkb21haW5zKTsKKyAgICB9KTsKKworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Cit9CisKK09wdGlvbmFsPFNlY29uZHM+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c3RhdGlzdGljc0VwaXJhdGlvblRpbWUoKSBjb25zdAoreworICAgIGlmICht
X3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIFdh
bGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpIC0gbV9wYXJhbWV0ZXJzLnRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKTsKKyAgICAKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRl
cy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIHJldHVybiBtX29wZXJh
dGluZ0RhdGVzLmZpcnN0KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICAKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdE
YXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpCit7
CisgICAgaWYgKGV4aXN0aW5nRGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGTW92
ZShuZXdEYXRlcyk7CisgICAgCisgICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1lcmdlZERhdGVz
KGV4aXN0aW5nRGF0ZXMuc2l6ZSgpICsgbmV3RGF0ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICAvLyBN
ZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0b3JzIG9mIGRhdGVzLgorICAgIHN0ZDo6bWVyZ2UoZXhp
c3RpbmdEYXRlcy5iZWdpbigpLCBleGlzdGluZ0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigp
LCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2VkRGF0ZXMuYmVnaW4oKSk7CisgICAgLy8gUmVtb3ZlIGR1
cGxpY2F0ZSBkYXRlcy4KKyAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsK
KyAgICAKKyAgICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hl
cyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KKyAgICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4g
b3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKKyAg
ICAKKyAgICByZXR1cm4gbWVyZ2VkRGF0ZXM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5l
d0RhdGVzKQoreworICAgIG1fb3BlcmF0aW5nRGF0ZXMgPSBtZXJnZU9wZXJhdGluZ0RhdGVzKG1f
b3BlcmF0aW5nRGF0ZXMsIFdURk1vdmUobmV3RGF0ZXMpKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdG9kYXkg
PSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpOworICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0Vt
cHR5KCkgJiYgdG9kYXkgPD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHdoaWxlIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRl
c1dpbmRvdykKKyAgICAgICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7CisKKyAgICBtX29w
ZXJhdGluZ0RhdGVzLmFwcGVuZCh0b2RheSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNX
aW5kb3cpIHsKKyAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSkgPCBtX29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZG9uJ3QgbWVl
dCB0aGUgcmVhbCBjcml0ZXJpYSBmb3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRoZSB1
c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0aW5n
KS4KKyAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKKyAg
ICAgICAgaWYgKFdhbGxUaW1lOjpub3coKSA+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
ICsgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKK3sK
KyAgICByZXR1cm4gaGFzU3RhdGlzdGljc0V4cGlyZWQocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wYXJhbWV0ZXJz
Lm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBy
dW5lVGFyZ2V0Q291bnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvID0gcHJ1bmVUYXJnZXRDb3VudDsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVm
YXVsdFZhbHVlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBt
X3BhcmFtZXRlcnMgPSB7IH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUg
PSBtYWtlUmVmKG1fc3RvcmUpLCBldmVudCA9IGV2ZW50Lmlzb2xhdGVkQ29weSgpXSB7CisgICAg
ICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZlbnQoZXZlbnQpOworICAgIH0pOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9
IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNj
ZXNzKFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0
aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdXBkYXRlQ29va2llQmxv
Y2tpbmcoW10oKSB7IH0pOworICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdXBkYXRl
Q2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNv
bnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5P
bmVMb2dTdGF0ZW1lbnQgPSA1MDsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAoZG9tYWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgZm9yOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3Ry
aW5nKGRvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYmF0Y2g7CisgICAgYmF0Y2gucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7Cisg
ICAgYXV0byBiYXRjaE51bWJlciA9IDE7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0g
c3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7CisgICAgCisgICAgZm9yIChhdXRvJiBkb21haW4g
OiBkb21haW5zKSB7CisgICAgICAgIGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGlu
IHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMu
IiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmco
YmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgYmF0Y2guc2hyaW5rKDApOworICAg
ICAgICAgICAgKytiYXRjaE51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBiYXRjaC5hcHBlbmQo
ZG9tYWluKTsKKyAgICB9CisgICAgaWYgKCFiYXRjaC5pc0VtcHR5KCkpCisgICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJs
aWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAl
dSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBk
b21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oYWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZG9tYWlucyk7CisjZW5kaWYKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyZTdiNjM2OGNmMzQxODJlN2MwN2M3NzIzYWMy
ZGJhNDNkNWUxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTAsMCArMSwy
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
Zmllci5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKwor
I2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyQ29jb2EuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBLZXllZERlY29kZXI7CitjbGFzcyBLZXllZEVuY29kZXI7CitzdHJ1Y3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKKworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7Citw
dWJsaWM6CisgICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBzdGF0aWMg
T3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUpOworICAgIHN0YXRpYyBPcGVyYXRp
bmdEYXRlIHRvZGF5KCk7CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0Owor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0OworICAg
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQorICAgICAgICA6IG1feWVhcih5ZWFyKQorICAgICAgICAsIG1fbW9udGgobW9udGgp
CisgICAgICAgICwgbV9tb250aERheShtb250aERheSkKKyAgICB7IH0KKworICAgIGludCBtX3ll
YXIgeyAwIH07CisgICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCisgICAgaW50IG1f
bW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCit9OworCisvLyBUaGlzIGlzIGFsd2F5cyBjb25z
dHJ1Y3RlZCAvIHVzZWQgLyBkZXN0cm95ZWQgb24gdGhlIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSdzIHN0YXRpc3RpY3MgcXVldWUuCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
PiB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7CisgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBUb3BGcmFtZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFN1YkZyYW1lRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgU3ViUmVzb3VyY2VEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBSZWRpcmVjdERvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgUmVkaXJlY3RlZFRvRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgTmF2aWdhdGVkRnJv
bURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE5hdmlnYXRl
ZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAg
dXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNp
bmcgT3BlbmVyUGFnZUlEID0gdWludDY0X3Q7CisgICAgdXNpbmcgUGFnZUlEID0gdWludDY0X3Q7
CisgICAgdXNpbmcgRnJhbWVJRCA9IHVpbnQ2NF90OworICAgIAorICAgIHZpcnR1YWwgflJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tp
bmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUb0Js
b2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5z
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBpbmNsdWRlVG9kYXlB
c09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NB
bmREYXRhUmVjb3JkcygpOworCisgICAgdmlydHVhbCB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVz
b3VyY2VzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jU3RvcmFnZUlmTmVlZGVkKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpID0gMDsKKyAg
ICB2b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKKworICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4m
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVk
aXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdCA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVk
Q291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFp
biYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBT
dWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBS
ZWRpcmVjdERvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYp
ID0gMDsKKworICAgIHZvaWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAg
dm9pZCBzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOwor
ICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsK
KyAgICB2b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgIE9wdGlvbmFs
PFNlY29uZHM+IHN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgY2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3QgPSAwOworCisgICAgdm9p
ZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZv
aWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCk7CisgICAgdm9pZCBzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCk7CisgICAgdm9pZCBz
ZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMpOworICAgIHZvaWQgc2V0TWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOworICAgIHZvaWQgc2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOworICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZShib29sKTsKKyAgICBib29sIGlzRGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfTsKKyAgICB2b2lkIHNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFj
Y2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdlSUQs
IGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNz
U3RhdHVzKT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3Vi
RnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHVz
ZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0Rv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYs
IGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYs
IGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFp
biYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBj
bGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKSA9IDA7CisKKyAgICB2b2lkIGRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBjb25zdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmIHN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yZTsgfQorCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhJbXBvcnRhbmNlIHsgMyB9OworCisgICAgdmlydHVhbCBib29s
IGlzTWVtb3J5U3RvcmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0RhdGFiYXNlU3RvcmUoKWNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHN0YXRpYyBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4g
bWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIGV4aXN0aW5n
RGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBWZWN0
b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKTsKKworICAgIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsK
KworICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpIGNvbnN0OworICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIGNvbnN0OworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisgICAgdm9p
ZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCBtZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmKTsKKyAgICB2
aXJ0dWFsIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2Vz
Rm9yRGVidWdNb2RlKCkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpID0gMDsKKworICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSB7IHJldHVybiBtX3N0b3JlOyB9CisgICAg
UmVmPFdvcmtRdWV1ZT4mIHdvcmtRdWV1ZSgpIHsgcmV0dXJuIG1fd29ya1F1ZXVlOyB9CisjaWYg
SEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZp
ZXJDb2NvYSYgY2xhc3NpZmllcigpIHsgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXI7IH0KKyNlbHNlCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIm
IGNsYXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
OyB9CisjZW5kaWYKKworICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKKyAgICAgICAgc2l6ZV90IHBy
dW5lRW50cmllc0Rvd25UbyB7IDgwMCB9OworICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0Vu
dHJpZXMgeyAxMDAwIH07CisgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb247CisgICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsIHsgMV9oIH07CisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsg
MjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICog
NyB9OworICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2gg
KiA3IH07CisgICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNC
ZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07CisgICAgICAgIGJvb2wgc2hvdWxkU3Vi
bWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9OworICAgIH07CisgICAgY29uc3QgUGFyYW1ldGVycyYgcGFy
YW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYgb3BlcmF0aW5nRGF0ZXMoKSBjb25zdCB7IHJldHVybiBtX29wZXJh
dGluZ0RhdGVzOyB9CisgICAgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkgeyBtX29wZXJhdGlu
Z0RhdGVzLmNsZWFyKCk7IH0KKyAgICBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcCgpIHsgcmV0dXJuIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQorICAgIGNv
bnN0IFdhbGxUaW1lJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOyB9CisgICAgdm9pZCBzZXRFbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wKGNvbnN0IFdhbGxUaW1lJiBncmFuZGZhdGhlcmluZ1RpbWUp
IHsgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gZ3JhbmRmYXRoZXJpbmdUaW1lOyB9
CisgICAgdm9pZCBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAoKSB7IG1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsgfQorICAgIGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlOyB9CisgICAgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnU3Rh
dGljUHJldmFsZW50UmVzb3VyY2U7IH0KKyAgICBib29sIGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQ7IH07CisgICAgYm9vbCBkZWJ1Z01v
ZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9CisgICAgYm9v
bCBzdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VB
Y2Nlc3NQcm9tcHRzRW5hYmxlZDsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjayB7IDUwIH07CisKK3By
aXZhdGU6CisgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkICA9IGVuYWJsZWQ7IH0KKyAgICBi
b29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWJ1Z0xv
Z2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVu
YWJsZWQ7IH0KKyAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOworICAg
IHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOworICAgIHZvaWQgdXBkYXRlQ2FjaGVN
YXhBZ2VDYXAoKTsKKyAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29u
ZHMpOworICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKKworICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgbV9zdG9yZTsKKyAgICBSZWY8V29ya1F1ZXVl
PiBtX3dvcmtRdWV1ZTsKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKKyAgICBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXI7CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyIG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7CisjZW5kaWYKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2FjdGl2ZVBsdWdpblRva2Vu
czsKKyNlbmRpZgorICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOworICAgIFZlY3RvcjxPcGVy
YXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOworICAgIFdhbGxUaW1lIG1fZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcDsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2U7CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNX
ZXJlUmVtb3ZlZDsKKyAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZGVudGlmaWVyIHsgMCB9OworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworICAgIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluIG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB7IFVSTCB7IFVSTCgpLCAiaHR0
cHM6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQub3JnIl9zIH0gfTsKKyAgICBib29sIG1fZGVidWdMb2dn
aW5nRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNlIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjlmN2U4ZjBhMjBkYWZlYTlhYjI5
ZTYwNzA3OGVmMTU3ZmIyYmJkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5t
bQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorCisjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2ltcG9ydCA8V2ViQ29yZS9SZWdpc3RyYWJsZURv
bWFpbi5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCit7Cisg
ICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBpbml0T25jZTsKKworICAgIGRpc3BhdGNoX29uY2Uo
JmluaXRPbmNlLCBeeworICAgICAgICBTZWNvbmRzIHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24o
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iXSk7CisgICAgICAg
IGlmICh0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID4gMF9zICYmIHRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24gPD0gMjRfaCAqIDMwKQorICAgICAgICAgICAgc2V0VGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbih0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTsKKworICAgICAgICBTZWNvbmRzIG1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIl0pOworICAgICAgICBpZiAobWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID4gMF9zICYmIG1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCA8IDFfaCkKKyAgICAgICAgICAgIHNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwpOworCisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lKFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRp
c3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiXSk7CisgICAgICAgIGlmIChncmFuZGZhdGhlcmluZ1Rp
bWUgPiAwX3MgJiYgZ3JhbmRmYXRoZXJpbmdUaW1lIDw9IDI0X2ggKiA3KQorICAgICAgICAgICAg
c2V0R3JhbmRmYXRoZXJpbmdUaW1lKGdyYW5kZmF0aGVyaW5nVGltZSk7CisKKyAgICAgICAgc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiSXRwRGVidWdNb2RlIl0pOworICAgICAgICBhdXRv
KiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiSXRwTWFudWFsUHJldmFsZW50UmVzb3VyY2Ui
XTsKKyAgICAgICAgaWYgKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIFVSTCB1cmwgeyBVUkwoKSwgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9OworICAg
ICAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0
cDovLyIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UpOworICAgICAgICAgICAgICAgIHVybCA9IHsgVVJMKCksIGJ1aWxkZXIudG9T
dHJpbmcoKSB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoUmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSk7CisgICAgICAgIH0KKworICAgICAgICBTZWNvbmRzIGNhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDYWNoZU1h
eEFnZUNhcCJdKTsKKyAgICAgICAgaWYgKGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzID4gMF9zICYmIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzIDw9IDI0X2gg
KiAzNjUpCisgICAgICAgICAgICBzZXRDYWNoZU1heEFnZUNhcChjYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk7CisgICAgICAgIAorICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVD
b29raWVzQWdlQ2FwKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJs
ZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGllbnRTaWRlQ29va2llc0FnZUNhcCJd
KTsKKyAgICAgICAgaWYgKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwID4gMF9zICYmIGNsaWVudFNp
ZGVDb29raWVzQWdlQ2FwIDw9IDI0X2ggKiAzNjUpCisgICAgICAgICAgICBzZXRBZ2VDYXBGb3JD
bGllbnRTaWRlQ29va2llcyhjbGllbnRTaWRlQ29va2llc0FnZUNhcCk7CisgICAgfSk7Cit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCmluZGV4IDY1NWQxMWU5YjVjNmNhZGE3YzliNTI1MzY5YzRmZTVjYTg0MmZkZjAuLjM3
MTNmOWIxNzFjMWI1MTk4MDk3NzJmMWIwOTIxYjE1MjdiNzkxNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5o
IgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgpAQCAtNDgsNiArNDks
OSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dy
ZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC04Niw4ICs5MCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0
aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFs
dWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRp
c3RpY3NTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1
ZSk7CiAgICAgfSk7CiB9CiAKQEAgLTk2LDkgKzEwMCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhb
dGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2
YWx1ZSk7Ci0gICAgICAgIAorICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCh2YWx1ZSk7CisKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMDgsOCArMTEyLDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHMKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRh
c2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTEyMCw4ICsxMjQsOCBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1l
dHJ5KGJvb2wgdmFsdWUpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBv
c3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAg
ICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSh2YWx1ZSk7Cisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwogICAgIH0pOwogfQogCkBAIC0x
NDEsMTMgKzE0NSwyMiBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShOZXR3b3JrU2Vzc2lvbiYgbgogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkgPSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5Lmlzb2xh
dGVkQ29weSgpXSB7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVl
KTsKLSAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1vcnlTdG9yZSwgbV9zdGF0
aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOworICAgICAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5pc0lUUERhdGFiYXNl
RW5hYmxlZCgpKSB7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZSA9IHN0ZDo6bWFrZV91
bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCp0aGlzLCBtX3N0YXRp
c3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSk7CisKKyAgICAgICAg
ICAgIGF1dG8gbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlKTsKKyAgICAgICAgICAg
IGF1dG8gcGVyc2lzdGVudFN0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+KCptZW1vcnlTdG9yZSwgbV9zdGF0aXN0aWNzUXVldWUs
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOworCisgICAgICAgICAgICBkb3duY2Fz
dDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3Jl
LmdldCgpKS5wb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSgqbWVtb3J5U3RvcmUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1
ZXVlKTsKKyAgICAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4oZG93bmNhc3Q8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLCBtX3N0YXRp
c3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSk7CisgICAgICAgIH0K
IAogICAgICAgICAvLyBGSVhNRSgxOTMyOTcpOiBUaGlzIHNob3VsZCBiZSByZXZpc2VkIGFmdGVy
IHRoZSBVSVByb2Nlc3MgdmVyc2lvbiBnb2VzIGF3YXkuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUt
PmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5k
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIH0pOwotICAgIAorCiAgICAgbV9kYWlseVRh
c2tzVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7CiB9CiAKQEAgLTE3Niw3ICsxODksNyBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVyc2lz
dGVudFN0b3JlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYg
KCFtX3BlcnNpc3RlbnRTdG9yYWdlICYmICFtX21lbW9yeVN0b3JlKQorICAgIGlmICghbV9wZXJz
aXN0ZW50U3RvcmFnZSAmJiAhbV9zdGF0aXN0aWNzU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZXN0cm95IHRoZSBwZXJzaXN0ZW50IHN0b3JlIG9uIHRoZSBi
YWNrZ3JvdW5kIHF1ZXVlIGFuZCB3YWl0IGZvciBpdCB0byBkaWUKQEAgLTE4Niw3ICsxOTksNyBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVy
c2lzdGVudFN0b3JlKCkKICAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwogICAgIG1fc3Rh
dGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbJnNlbWFwaG9yZSwgdGhpc10gewogICAgICAgICBtX3Bl
cnNpc3RlbnRTdG9yYWdlID0gbnVsbHB0cjsKLSAgICAgICAgbV9tZW1vcnlTdG9yZSA9IG51bGxw
dHI7CisgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgc2VtYXBo
b3JlLnNpZ25hbCgpOwogICAgIH0pOwogICAgIHNlbWFwaG9yZS53YWl0KCk7CkBAIC0xOTcsOCAr
MjEwLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWwKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZSh2YWx1ZSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMjA4LDggKzIyMSw4IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShjb25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBw
b3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFByZXZh
bGVudFJlc291cmNlRm9yRGVidWdNb2RlKGRvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRpc3Rp
Y3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRQcmV2YWxlbnRSZXNv
dXJjZUZvckRlYnVnTW9kZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTIxOSw4ICsyMzIsOCBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHNQcm9jZXNzaW5nKAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
CiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcygp
OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwogICAgICAgICBwb3N0
VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTIz
OCwxNyArMjUxLDE5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yCiAgICAgLy8gY29taW5nIGZy
b20gSVBDLiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG9ubHkgY29udGFpbnMgc3RyaW5ncyB3aGlj
aCBhcmUgc2FmZSB0byBtb3ZlIHRvIG90aGVyIHRocmVhZHMgYXMgbG9uZwogICAgIC8vIGFzIG5v
Ym9keSBvbiB0aGlzIHRocmVhZCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aG9zZSBzdHJpbmdzLgog
ICAgIHBvc3RUYXNrKFt0aGlzLCBvcmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAoIW1fc3RhdGlzdGlj
c1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCptX3N0YXRp
c3RpY3NTdG9yZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+bWVyZ2VTdGF0aXN0aWNzKFdURk1vdmUob3JpZ2lucykpOworICAgICAgICBhdXRvJiBtZW1v
cnlTdG9yZSA9IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKm1f
c3RhdGlzdGljc1N0b3JlKTsKKyAgICAKKyAgICAgICAgbWVtb3J5U3RvcmUubWVyZ2VTdGF0aXN0
aWNzKFdURk1vdmUob3JpZ2lucykpOwogCiAgICAgICAgIC8vIFdlIGNhbiBjYW5jZWwgYW55IHBl
bmRpbmcgcmVxdWVzdCB0byBwcm9jZXNzIHN0YXRpc3RpY3Mgc2luY2Ugd2UncmUgZG9pbmcgaXQg
c3luY2hyb25vdXNseSBiZWxvdy4KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FuY2VsUGVuZGlu
Z1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworICAgICAgICBtZW1vcnlTdG9yZS5jYW5j
ZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCk7CiAKICAgICAgICAgLy8gRmly
ZSBiZWZvcmUgcHJvY2Vzc2luZyBzdGF0aXN0aWNzIHRvIHByb3BhZ2F0ZSB1c2VyIGludGVyYWN0
aW9uIGFzIGZhc3QgYXMgcG9zc2libGUgdG8gdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICAgICAg
bV9tZW1vcnlTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOwotICAgICAgICBt
X21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgICAg
IG1lbW9yeVN0b3JlLnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICAgICAgbWVt
b3J5U3RvcmUucHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwogICAgIH0pOwogfQog
CkBAIC0yNTgsMTcgKzI3MywyMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcwogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21h
aW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BG
cmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBp
ZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSkgewog
ICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBtX21lbW9yeVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNTdG9yYWdlQWNjZXNzKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFzU3RvcmFnZUFjY2Vzcyk7CisK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+aGFzU3RvcmFnZUFjY2VzcyhzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4s
IGZyYW1lSUQsIHBhZ2VJRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGJvb2wgaGFzU3RvcmFnZUFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgaGFzU3RvcmFnZUFjY2Vzc10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoaGFzU3RvcmFnZUFjY2Vzcyk7CisgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0K
IApAQCAtMzI1LDE4ICszNDMsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICB9CiAK
ICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHko
KSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVt
b3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAg
ICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihT
dG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUo
dG9wRnJhbWVEb21haW4pLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VB
Y2Nlc3NTdGF0dXMgc3RhdHVzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10o
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0dXMpOwor
ICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RG
TW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFi
bGVkLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3Rv
cmFnZUFjY2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RU
YXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHN0YXR1c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKKyAgICAgICAgfQogICAgIH0pOwogfQogCkBAIC0zNDgsOCArMzY4LDggQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJP
cGVuZXIoUmVnaXN0cmFibGUKICAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFN0cmluZ3Mgd2hpY2gg
YXJlIHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcgYXMgbm9ib2R5IG9uIHRo
aXMgdGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8gdGhvc2Ugc3RyaW5ncy4KICAg
ICBwb3N0VGFzayhbdGhpcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV1RGTW92ZShk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIG9wZW5lckRvbWFpbiA9
IFdURk1vdmUob3BlbmVyRG9tYWluKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2Vzc1Vu
ZGVyT3BlbmVyKFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFn
ZUlELCBXVEZNb3ZlKG9wZW5lckRvbWFpbikpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3Rv
cmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3NV
bmRlck9wZW5lcihXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBh
Z2VJRCwgV1RGTW92ZShvcGVuZXJEb21haW4pKTsKICAgICB9KTsKIH0KIApAQCAtMzU3LDE4ICsz
NzcsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFn
ZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlz
b2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3Rv
cmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5ncmFudFN0b3JhZ2VBY2Nl
c3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFt
ZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdhc0dyYW50ZWRBY2Nlc3MpOworICAgICAgICBp
ZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5n
cmFudFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJh
bWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFj
Y2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3Jh
bnRlZEFjY2Vzcyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzk3LDkgKzQxOSw5IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcygp
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzXSB7
Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NT
dG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+ZGlkQ3Jl
YXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKCk7CiAgICAgfSk7CiB9CiAKQEAgLTQyMywxMSArNDQ1LDEwIEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNrcygpCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzXSB7Ci0g
ICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBtX21lbW9yeVN0b3JlLT5pbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgp
OwotICAgICAgICBtX21lbW9yeVN0b3JlLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAg
ICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsK
KyAgICAgICAgfQogICAgIH0pOwogfQogCkBAIC00MzYsOCArNDU3LDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRh
c2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqbV9t
ZW1vcnlTdG9yZSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSAmJiBpczxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpCisgICAgICAg
ICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJt
aXQoZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0
aWNzU3RvcmUpKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKQEAgLTQ3NiwyNyArNDk3LDI2IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgV2ViRnJhbWVQcm94
eSYgZnJhCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZp
Z2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNv
dXJjZURvbWFpbiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKQogewogICAgIHBv
c3RUYXNrKFt0aGlzLCB0YXJnZXREb21haW4gPSB0YXJnZXREb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHNvdXJjZURv
bWFpbiA9IHNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgaXNSZWRpcmVjdCwgaXNNYWluRnJh
bWVdIHsKLQotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPmxvZ0ZyYW1lTmF2aWdhdGlvbih0YXJnZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBz
b3VyY2VEb21haW4sIGlzUmVkaXJlY3QsIGlzTWFpbkZyYW1lKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmxvZ0ZyYW1lTmF2
aWdhdGlvbih0YXJnZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBzb3VyY2VEb21haW4sIGlzUmVk
aXJlY3QsIGlzTWFpbkZyYW1lKTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWlu
LCBXYWxsVGltZSBsYXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJnZXREb21haW4gPSB0YXJnZXRE
b21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCksIGxhc3RTZWVuLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21h
aW4sIHRvcEZyYW1lRG9tYWluLCBsYXN0U2Vlbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NT
dG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRp
bmcodGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOwogCiAgICAgICAgIHBv
c3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCi12
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5n
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHRhcmdldERvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBX
YWxsVGltZSBsYXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJnZXREb21haW4gPSB0YXJnZXREb21h
aW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0
ZWRDb3B5KCksIGxhc3RTZWVuLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAg
ICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21haW4s
IHRvcEZyYW1lRG9tYWluLCBsYXN0U2Vlbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9y
ZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmco
dGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOwogCiAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNTA1LDkg
KzUyNSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNv
dXJjZUxvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVEb21hCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
cG9zdFRhc2soW3RoaXMsIHNvdXJjZURvbWFpbiA9IHNvdXJjZURvbWFpbi5pc29sYXRlZENvcHko
KSwgdGFyZ2V0RG9tYWluID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJl
c291cmNlUmVkaXJlY3Qoc291cmNlRG9tYWluLCB0YXJnZXREb21haW4pOwotCisgICAgICAgIGlm
IChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5sb2dT
dWJyZXNvdXJjZVJlZGlyZWN0KHNvdXJjZURvbWFpbiwgdGFyZ2V0RG9tYWluKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBA
IC01MTcsOCArNTM2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5sb2dVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgaWYg
KG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmxvZ1Vz
ZXJJbnRlcmFjdGlvbihkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTUyOCw4ICs1NDcsOCBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3Qg
UmVnaXN0cmFibGVEb21haQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAg
ICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVh
clVzZXJJbnRlcmFjdGlvbihkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24oZG9t
YWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgfSk7CiB9CkBAIC01MzcsNyArNTU2LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkK
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rp
b24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgZG9t
YWluLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1fbWVtb3J5U3RvcmUg
PyBtX21lbW9yeVN0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluKSA6IGZhbHNlOwor
ICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9z
dGF0aXN0aWNzU3RvcmUtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4pIDogZmFsc2U7CiAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoW2hhZFVzZXJJbnRlcmFjdGlvbiwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGhhZFVzZXJJbnRlcmFjdGlvbik7CiAgICAgICAgIH0pOwpAQCAt
NTQ5LDggKzU2OCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRM
YXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluCiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCBzZWNvbmRzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldExhc3RTZWVuKGRvbWFpbiwgc2Vjb25kcyk7
CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlLT5zZXRMYXN0U2Vlbihkb21haW4sIHNlY29uZHMpOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTU2MCw4ICs1
NzksOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haQogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRp
c3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRQcmV2YWxlbnRS
ZXNvdXJjZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTU3MSw4ICs1OTAsOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAo
bV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAg
ICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGRvbWFp
bik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtNTgyLDcgKzYwMSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmR1
bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBlbXB0eVN0cmluZygpOworICAgICAgICBTdHJp
bmcgcmVzdWx0ID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MoKSA6IGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIHBvc3RUYXNr
UmVwbHkoW3Jlc3VsdCA9IHJlc3VsdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CiAgICAgICAgIH0pOwpAQCAtNTk0LDcgKzYxMyw3IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX21lbW9yeVN0b3JlID8g
bV9tZW1vcnlTdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CisgICAg
ICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZSA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0
aXN0aWNzU3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOwogICAgICAg
ICBwb3N0VGFza1JlcGx5KFtpc1ByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoaXNQcmV2YWxlbnRSZXNvdXJjZSk7CiAgICAgICAgIH0pOwpAQCAtNjA2
LDcgKzYyNSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvCiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlID0g
bV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKGRv
bWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IG1f
c3RhdGlzdGljc1N0b3JlID8gbV9zdGF0aXN0aWNzU3RvcmUtPmlzVmVyeVByZXZhbGVudFJlc291
cmNlKGRvbWFpbikgOiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZSk7CiAgICAgICAgIH0pOwpAQCAtNjE4LDcgKzYzNyw4IEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoY29uc3QgUmVnaXN0CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBv
c3RUYXNrKFt0aGlzLCBzdWJyZXNvdXJjZURvbWFpbiA9IHN1YnJlc291cmNlRG9tYWluLmlzb2xh
dGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fbWVt
b3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
c3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29s
IGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9z
dGF0aXN0aWNzU3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihzdWJyZXNvdXJj
ZURvbWFpbiwgdG9wRnJhbWVEb21haW4pCisgICAgICAgICAgICA6IGZhbHNlOwogICAgICAgICBw
b3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOwog
ICAgICAgICB9KTsKQEAgLTYzMCw3ICs2NTAsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdHJhYgog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3Vi
RnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21h
aW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1Jl
Z2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFp
bikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBt
X3N0YXRpc3RpY3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIoc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKQorICAgICAgICAgICAgOiBm
YWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKTsKICAgICAgICAgfSk7CkBAIC02NDIsNyArNjYzLDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBS
ZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVkaXJlY3RlZEZyb20uaXNvbGF0
ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRl
ZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGRvbWFpblJlZGlyZWN0ZWRGcm9tLCBkb21haW5SZWRpcmVjdGVkVG8pIDogZmFsc2U7CisgICAg
ICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvID0gbV9zdGF0aXN0aWNzU3RvcmUg
PyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGRvbWFpblJl
ZGlyZWN0ZWRGcm9tLCBkb21haW5SZWRpcmVjdGVkVG8pCisgICAgICAgICAgICA6IGZhbHNlOwog
ICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8sIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8p
OwogICAgICAgICB9KTsKQEAgLTY1NCw4ICs2NzYsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURv
bQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3Ro
aXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhclByZXZhbGVudFJlc291
cmNlKGRvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT5jbGVhclByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CiAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwog
fQpAQCAtNjY1LDggKzY4Nyw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21h
aW4uaXNvbGF0ZWRDb3B5KCksIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyZWQoZG9tYWluLCB2YWx1
ZSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlz
dGljc1N0b3JlLT5zZXRHcmFuZGZhdGhlcmVkKGRvbWFpbiwgdmFsdWUpOwogICAgICAgICBwb3N0
VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTY3
Niw3ICs2OTgsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkbwogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgp
XSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9IG1fbWVtb3J5U3Rv
cmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQoZG9tYWluKSA6IGZhbHNlOworICAg
ICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0aXN0
aWNzU3RvcmUtPmlzR3JhbmRmYXRoZXJlZChkb21haW4pCisgICAgICAgICAgICA6IGZhbHNlOwog
ICAgICAgICBwb3N0VGFza1JlcGx5KFtpc0dyYW5kRmF0aGVyZWQsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihpc0dyYW5kRmF0aGVyZWQpOwogICAgICAgICB9KTsKQEAgLTY4OCw4
ICs3MTEsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21h
aW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0
ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKHN1YkZy
YW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9y
ZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW4oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKTsKICAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC02OTks
OCArNzIyLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWcKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdWJyZXNvdXJjZURvbWFpbiA9IHN1YnJlc291
cmNlRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWlu
Lmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihzdWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFp
bik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtNzEwLDggKzczMyw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3Vy
Y2VEb21haW4gPSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJl
Y3RlZFRvID0gZG9tYWluUmVkaXJlY3RlZFRvLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVk
aXJlY3RlZFRvKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhzdWJyZXNv
dXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZFRvKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC03MjEsOCArNzQ0LDgg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2kKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBzdWJyZXNvdXJjZURvbWFpbiA9IHN1YnJlc291cmNlRG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkRnJvbSA9IGRvbWFpblJlZGlyZWN0ZWRG
cm9tLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRpcmVjdGVkRnJvbSk7CisgICAgICAg
IGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWlu
UmVkaXJlY3RlZEZyb20pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTczMiw4ICs3NTUsOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFJlZ2lzdHJhYgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9z
dFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRvbWFp
blJlZGlyZWN0ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRlZENvcHkoKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVEb21haW4sIGRvbWFpblJl
ZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVE
b21haW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNzQzLDggKzc2Niw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBSZWdpc3RyCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgZG9tYWluUmVkaXJlY3RlZEZyb20gPSBkb21haW5SZWRpcmVjdGVkRnJvbS5pc29sYXRl
ZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFt
ZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZEZyb20pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb20odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAgICAg
ICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CkBAIC03NTUsMTMgKzc3OCwxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZAogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUpIHsK
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnVw
ZGF0ZUNvb2tpZUJsb2NraW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworCisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNz
U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTc3MCwxNCAr
Nzk3LDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNv
b2tpZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlucyhjb25zCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHRocmVhZC4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNr
KFt0aGlzLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3RhdGlz
dGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1f
bWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhkb21haW5zVG9CbG9j
aywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOworCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NT
dG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT51cGRhdGVDb29raWVCbG9ja2lu
Z0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTc4NiwxNCAr
ODE2LDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlucyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
ICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlKSB7CiAg
ICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoZG9tYWlucywgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAg
IH0pOworCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3Rh
dGlzdGljc1N0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAg
ICAgfSk7CiB9CiAKQEAgLTgwNCwyMiArODM3LDI3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdy
CiAgICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQogICAgICAgICAgICAgbV9wZXJzaXN0
ZW50U3RvcmFnZS0+Y2xlYXIoKTsKIAotICAgICAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdT
Y29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3Rp
Y3NTdG9yZSkgeworICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNob3VsZEdy
YW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQgQmVmb3JlIGJlaW5nIGNsZWFyZWQsIG1f
c3RhdGlzdGljc1N0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4i
KTsKKworICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9
KTsKIAotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkgewotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYo
KSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlckNhbGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAobV9zdGF0
aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5jbGVhcihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBzaG91bGRHcmFuZGZh
dGhlciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
KCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNo
b3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+
Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5ncmFuZGZhdGhlckV4aXN0
aW5nV2Vic2l0ZURhdGEoW2NhbGxiYWNrQWdncmVnYXRvciA9IFdURk1vdmUoY2FsbGJhY2tBZ2dy
ZWdhdG9yKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdoZW4g
dHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5n
IGNsZWFyZWQsIG1fc3RhdGlzdGljc1N0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRm
YXRoZXIgZGF0YS4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
Y2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBiZWluZyBjbGVhcmVkLCBt
X21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsK
ICAgICAgICAgfQogICAgIH0pOwogfQpAQCAtODM3LDggKzg3NSw4IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMgc2Vjb25kCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFz
ayhbdGhpcywgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKHNlY29uZHMp
OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBA
IC04NDcsOCArODg1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWMKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CisgICAgICAgIGlm
IChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CiAKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC04
NTgsOCArODk2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdy
YW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXAKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoc2Vjb25kcyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkK
KyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoc2Vj
b25kcyk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgfSk7CkBAIC05MDMsOCArOTQxLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBt
YXhpbXVtRW50cnlDb3VudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobWF4aW11bUVudHJ5
Q291bnQpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobWF4aW11bUVudHJ5Q291bnQp
OwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwpAQCAtOTE1LDggKzk1Myw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBwcnVuZVRh
cmdldENvdW50LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8ocHJ1bmVUYXJnZXRDb3VudCk7Cisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8ocHJ1bmVUYXJnZXRDb3VudCk7CiAKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC05
MjcsOCArOTY1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0
UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGEKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKCk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAg
ICAgIG1fc3RhdGlzdGljc1N0b3JlLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsK
IAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAppbmRl
eCAwNjM0Mzg1YzEwYjMyNDE4NDEyODhmZjg0MTkxZDkyODI1OThiOGQxLi4wYTFhMzAzY2RmODY1
MzI2ZDI4MWM5MTViYmY0MmRmZGM1ZjdlZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC01Miw3ICs1Miw3IEBAIGVudW0gY2xhc3MgU2hvdWxk
U2FtcGxlIDogYm9vbDsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrU2Vzc2lv
bjsKLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKK2NsYXNzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZTsKIGNsYXNzIFdlYkZyYW1lUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUHJv
eHk7CkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYWtQdHI8TmV0d29ya1Nl
c3Npb24+IG1fbmV0d29ya1Nlc3Npb247CiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9zdGF0aXN0aWNz
UXVldWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZT4gbV9tZW1vcnlTdG9yZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiBtX3N0YXRpc3RpY3NTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBtX3BlcnNpc3RlbnRTdG9yYWdl
OwogCiAgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBt
X2RhaWx5VGFza3NUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKaW5kZXggNTVjYmFiODY0ZmVlYjljY2U4MzRiNGZhZGQ5YzQwMDIzYjRi
OTIyMC4uZmY0MDJiZDI5ODljNmRlNTNhZDc0Yzk0ZTg0ZGQ1MTk0ZGNkZWNkNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTcyLDYg
KzcyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50
aW1lQXBwbGljYXRpb25DaGVja3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDx3dGYvQWxnb3JpdGht
cy5oPgpAQCAtMzA5LDYgKzMxMCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgaWYg
KHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKQogICAgICAgICBzd2l0
Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCk7CiAKKyAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldElUUERhdGFiYXNlRW5hYmxlZChwYXJhbWV0ZXJz
LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlKTsKKwogICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1
bWVQZXJtYW5lbnRseShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5z
aW9uSGFuZGxlKTsKIAogICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5kZWZhdWx0RGF0
YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0
aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCBjNmRmMDhlOWZiNzc2NmY3NzBhZmFk
ZWYxYWE3ZjIxMjk0OWQxZjU1Li4wODcxNTBhMWQ1MjFhNTI0ZWNiZDhiNWQ5YTFiNDg2M2FmMTZh
NTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcApAQCAtOTMsNiArOTMsNyBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAogI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKICAgICBlbmNv
ZGVyIDw8IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPDwgc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSA8PCB1cmxTY2hlbWVzU2Vydmlj
ZVdvcmtlcnNDYW5IYW5kbGUgPDwgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVy
bWluYXRpb25EZWxheTsKICNlbmRpZgorICAgIGVuY29kZXIgPDwgc2hvdWxkRW5hYmxlSVRQRGF0
YWJhc2U7CiB9CiAKIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmRlY29k
ZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
JiByZXN1bHQpCkBAIC0yMTcsNiArMjE4LDkgQEAgYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9u
UGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2MKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJl
c3VsdC5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXgg
MmZkM2JlOWZkZWQ5ODBiNzU3M2NlM2I1MTZiMDdhOTZmYWRhZjczYi4uZmM5MDBjMmVkN2YwY2Vm
YjE4MjkwYzQwZjgwMzVjY2ZlNWQ5NzhmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aApAQCAtMTExLDYgKzExMSw3IEBAIHN0cnVjdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyB7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1lc1NlcnZpY2VXb3JrZXJzQ2FuSGFu
ZGxlOwogICAgIGJvb2wgc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRp
b25EZWxheSB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBib29sIHNob3VsZEVuYWJsZUlUUERhdGFi
YXNlIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKaW5kZXggZjFlYTc5MjlkNTMwN2YwNWRjMDY4
MGY2NDc1NGE2OWY4M2U5ODU2Yi4uYjQ0OTJhNGQyNDlmYzk3ZGNhOGFhM2QzMjNkMzUyNzliYWY2
ZDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcg
KzQ3LDEyIEBAIFJlc291cmNlTG9hZFByZXZhbGVuY2UgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNlUHJldmFsCiAgICAgYXV0byBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c1RvQ291bnQgPSByZXNvdXJjZVN0YXRpc3RpYy5zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvLnNpemUoKTsKICAgICBhdXRvIHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFp
bnNDb3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMu
c2l6ZSgpOwogICAgIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gcmVzb3Vy
Y2VTdGF0aXN0aWMudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zaXplKCk7Ci0gICAgCisKKyAg
ICByZXR1cm4gY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHN1YnJlc291cmNlVW5kZXJUb3BG
cmFtZURvbWFpbnNDb3VudCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBzdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCwgY3VycmVudFByZXZhbGVuY2UpOworfQorCitSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOjpjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVu
Y2UodW5zaWduZWQgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25l
ZCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHVuc2lnbmVkIHN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgdW5zaWduZWQgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50LCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNlKQorewogICAg
IGlmICghc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50CiAgICAgICAgICYmICFz
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQKICAgICAgICAgJiYgIXN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbnNDb3VudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZp
ZXIuaAppbmRleCBhY2YxZjM4OWRkNTFhMDBjNTEwN2RjNjcyZjlkM2ZiYTlmMmJmZWYwLi41OGY1
NjVhMTFhNzczNWQwNDEyOTNjYWJmNDFjMjViYzY1NWQxOTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZp
ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0NsYXNzaWZpZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMCArNDIsMTEgQEAgcHVibGljOgogICAgIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyKCkgPSBkZWZhdWx0OwogICAgIHZpcnR1YWwgflJl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyKCkgPSBkZWZhdWx0OwogICAgIFJlc291cmNl
TG9hZFByZXZhbGVuY2UgY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBSZXNvdXJjZUxvYWRQ
cmV2YWxlbmNlIGN1cnJlbnRQcmV2YWxlbmNlKTsKKyAgICBSZXNvdXJjZUxvYWRQcmV2YWxlbmNl
IGNhbGN1bGF0ZVJlc291cmNlUHJldmFsZW5jZSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50LCB1bnNpZ25l
ZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIFJlc291cmNlTG9hZFByZXZhbGVuY2Ug
Y3VycmVudFByZXZhbGVuY2UpOwogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lm
eSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVk
IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRl
clRvcEZyYW1lT3JpZ2luc0NvdW50KQorICAgIHZpcnR1YWwgYm9vbCBjbGFzc2lmeSh1bnNpZ25l
ZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1l
T3JpZ2luc0NvdW50KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRo
cmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50
KTsKKyAgICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKICAgICB9CiAgICAgYm9v
bCBjbGFzc2lmeVdpdGhWZWN0b3JUaHJlc2hvbGQodW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25l
ZCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2Nv
Y29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFz
c2lmaWVyQ29jb2EuY3BwCmluZGV4IGFjZmJlM2NkYmMxYzNhOTUxZjcyMzcwYmQ1OTg3ZTQ3MmU4
ZDRjMjUuLmUxZjUzMDRlOTMyMjY4NGVjNjA2MjZjNjMwMzk3NWYyM2QxYjhjMDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzQ2xhc3NpZmllckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L2NsYXNzaWZpZXIvY29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5j
cHAKQEAgLTM1LDE1ICszNSwxNSBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hOjpjbGFzc2lmeSh1bnNpZ25lZCBzdWJy
ZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2lnbmVkIHN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2lu
c0NvdW50KQorYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hOjpjbGFz
c2lmeSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2ln
bmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQogewogICAgIGlmICghY2FuVXNlQ29yZVByZWRpY3Rp
b24oKSkKLSAgICAgICAgcmV0dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudCwgc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKKyAgICAgICAgcmV0
dXJuIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVE
b21haW5zQ291bnQsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgc3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KTsKIAogICAgIFZlY3Rvcjxzdm1fbm9kZT4gZmVhdHVy
ZXM7CiAKLSAgICBpZiAoc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQotICAg
ICAgICBmZWF0dXJlcy5hcHBlbmQoezEsIHN0YXRpY19jYXN0PGRvdWJsZT4oc3VicmVzb3VyY2VV
bmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KX0pOworICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQpCisgICAgICAgIGZlYXR1cmVzLmFwcGVuZCh7MSwgc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQpfSk7CiAgICAg
aWYgKHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCkKICAgICAgICAgZmVhdHVyZXMu
YXBwZW5kKHsyLCBzdGF0aWNfY2FzdDxkb3VibGU+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudCl9KTsKICAgICBpZiAoc3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luc0NvdW50KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKaW5kZXggZjU1ODQzMjU5MGZi
ZGViNjg5NzkzZTBiNDliMjY3Nzg0MTY3ZDJlYS4uZTJhZTZhODEyYjY3ODBhN2UwODA0MjI1NjEy
ZGNhYWJjOTJlMTA5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXMueWFtbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1s
CkBAIC0xMzc5LDYgKzEzNzksMTQgQEAgSXRwRGVidWdNb2RlRW5hYmxlZDoKICAgaHVtYW5SZWFk
YWJsZURlc2NyaXB0aW9uOiAiSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVudGlvbiBEZWJ1ZyBN
b2RlIgogICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwogCitJc0lUUERh
dGFiYXNlRW5hYmxlZDoKKyAgdHlwZTogYm9vbAorICBkZWZhdWx0VmFsdWU6IGZhbHNlCisgIGh1
bWFuUmVhZGFibGVOYW1lOiAiSVRQIERhdGFiYXNlIEJhY2tlbmQiCisgIGh1bWFuUmVhZGFibGVE
ZXNjcmlwdGlvbjogIkVuYWJsZSBJbnRlbGxpZ2VudCBUcmFja2luZyBQcmV2ZW50aW9uIERhdGFi
YXNlIEJhY2tlbmQiCisgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCisg
IGNhdGVnb3J5OiBpbnRlcm5hbAorCiBTZXJ2aWNlV29ya2Vyc0VuYWJsZWQ6CiAgIHR5cGU6IGJv
b2wKICAgZGVmYXVsdFZhbHVlOiBERUZBVUxUX1NFUlZJQ0VfV09SS0VSU19FTkFCTEVECmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAppbmRleCA3NDA3Y2MyMTkwM2UyNjRiODg0OGM4NWE1ODk1MDg0NGQzZGRhYzQ4Li4yZWZi
OGU1OThiNmQ0N2UyMTcyZWI5MzViYjI5NDYzMGEzY2MyMjNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTQy
LDggKzQyLDEwIEBAIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRTdHJlYW0uY3BwCiBOZXR3
b3JrUHJvY2Vzcy9QaW5nTG9hZC5jcHAKIE5ldHdvcmtQcm9jZXNzL1ByZWNvbm5lY3RUYXNrLmNw
cAogCitOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmNwcAogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAKK05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA5
MjljNTBlMmUwNjBjNjdkYzljN2E1MTFmMGY5NzY5ZmI4YzNkOTA4Li5mOTdkNzQwM2U2YjQyNmIz
NDgzYTUzZDZkYmIzYWUxMjJlN2FmZTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yOSw2
ICsyOSw3IEBAIE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtEYXRhVGFza0NvY29hLm1tCiBO
ZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCiBOZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrU2Vzc2lvbkNvY29hLm1tCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0KIE5ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcAogTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5LmNwcAogCkBA
IC0zMjksNyArMzMwLDYgQEAgVUlQcm9jZXNzL0NvY29hL01lZGlhQ2FwdHVyZVV0aWxpdGllcy5t
bQogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQogVUlQcm9jZXNzL0NvY29hL1Bh
Z2VDbGllbnRJbXBsQ29jb2EubW0KIFVJUHJvY2Vzcy9Db2NvYS9QbGF5YmFja1Nlc3Npb25NYW5h
Z2VyUHJveHkubW0KLVVJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmVDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1NhZmVCcm93c2luZ1dhcm5pbmdDb2NvYS5t
bQogVUlQcm9jZXNzL0NvY29hL1Nlc3Npb25TdGF0ZUNvZGluZy5tbQogVUlQcm9jZXNzL0NvY29h
L1N5c3RlbVByZXZpZXdDb250cm9sbGVyQ29jb2EubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29h
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlQ29jb2EubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmE2
Mjc2NjUyZTFkZjZmZGE0ZGQ4YjU3NTRlM2JmMDFjMzc2ZDAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0KKysrIC9kZXYvbnVsbApA
QCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNp
bXBvcnQgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oIgotCi0jaWYgRU5BQkxF
KFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKLQotI2ltcG9ydCA8V2ViQ29yZS9SZWdpc3RyYWJs
ZURvbWFpbi5oPgotI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2ltcG9ydCA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRl
ZCgpCi17Ci0gICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBpbml0T25jZTsKLQotICAgIGRpc3Bh
dGNoX29uY2UoJmluaXRPbmNlLCBeewotICAgICAgICBTZWNvbmRzIHRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9y
S2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iXSk7
Ci0gICAgICAgIGlmICh0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID4gMF9zICYmIHRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24gPD0gMjRfaCAqIDMwKQotICAgICAgICAgICAgc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbih0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTsKLQotICAgICAgICBT
ZWNvbmRzIG1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIl0pOwotICAgICAgICBp
ZiAobWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID4gMF9zICYmIG1pbmltdW1U
aW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCA8IDFfaCkKLSAgICAgICAgICAgIHNldE1pbmlt
dW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVj
b3Jkc1JlbW92YWwpOwotCi0gICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lKFtbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNl
TG9hZFN0YXRpc3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiXSk7Ci0gICAgICAgIGlmIChncmFuZGZh
dGhlcmluZ1RpbWUgPiAwX3MgJiYgZ3JhbmRmYXRoZXJpbmdUaW1lIDw9IDI0X2ggKiA3KQotICAg
ICAgICAgICAgc2V0R3JhbmRmYXRoZXJpbmdUaW1lKGdyYW5kZmF0aGVyaW5nVGltZSk7Ci0KLSAg
ICAgICAgc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShbW05TVXNlckRlZmF1bHRz
IHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiSXRwRGVidWdNb2RlIl0pOwotICAg
ICAgICBhdXRvKiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiSXRwTWFudWFsUHJldmFsZW50
UmVzb3VyY2UiXTsKLSAgICAgICAgaWYgKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpIHsK
LSAgICAgICAgICAgIFVSTCB1cmwgeyBVUkwoKSwgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJj
ZSB9OwotICAgICAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiaHR0cDovLyIpOwotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRlYnVnTWFu
dWFsUHJldmFsZW50UmVzb3VyY2UpOwotICAgICAgICAgICAgICAgIHVybCA9IHsgVVJMKCksIGJ1
aWxkZXIudG9TdHJpbmcoKSB9OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHVybC5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01v
ZGUoUmVnaXN0cmFibGVEb21haW4geyB1cmwgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICBTZWNv
bmRzIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDYWNoZU1heEFnZUNhcCJdKTsKLSAgICAgICAgaWYgKGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFs
ZW50UmVzb3VyY2VzID4gMF9zICYmIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2Vz
IDw9IDI0X2ggKiAzNjUpCi0gICAgICAgICAgICBzZXRDYWNoZU1heEFnZUNhcChjYWNoZU1heEFn
ZUNhcEZvclByZXZhbGVudFJlc291cmNlcyk7Ci0gICAgICAgIAotICAgICAgICBTZWNvbmRzIGNs
aWVudFNpZGVDb29raWVzQWdlQ2FwKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVs
dHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGllbnRTaWRlQ29va2ll
c0FnZUNhcCJdKTsKLSAgICAgICAgaWYgKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwID4gMF9zICYm
IGNsaWVudFNpZGVDb29raWVzQWdlQ2FwIDw9IDI0X2ggKiAzNjUpCi0gICAgICAgICAgICBzZXRB
Z2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyhjbGllbnRTaWRlQ29va2llc0FnZUNhcCk7Ci0gICAg
fSk7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCA5ODc0NmMzN2M1MjRjODc4NGI3YTZl
ODI2Njc2NjY1MTc1ZjZmYjBkLi5iMjA3Y2Q0MjExODc4NTYzMGI5ODhkNzhiNWE1YmM2ZWFmNWFj
NTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNz
UG9vbENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KQEAgLTI5Niw2ICsyOTYsOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpw
bGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YQogI2lmIEVOQUJMRShQUk9YSU1JVFlfTkVUV09SS0lORykKICAgICBwYXJhbWV0ZXJzLndpcmVs
ZXNzQ29udGV4dElkZW50aWZpZXIgPSBtX2NvbmZpZ3VyYXRpb24tPndpcmVsZXNzQ29udGV4dElk
ZW50aWZpZXIoKTsKICNlbmRpZgorCisgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRh
YmFzZSA9IFtkZWZhdWx0cyBib29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
SW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVk
S2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogfQogCiB2b2lkIFdlYlByb2Nlc3NQb29s
OjpwbGF0Zm9ybUludmFsaWRhdGVDb250ZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Qcm92aXNpb25hbFBhZ2VQcm94eS5oCmluZGV4IDg4ODNmNzM0NTY3Njk0NGY0M2IzODgwMWM1
YTUxYWMwNzBiMjQ1YjEuLjE2YmQ1Y2Q1ODUxM2FmYWU5YjAwMmQ2OTI4MjczMjBhNjY3NzQ5ODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaApA
QCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUg
IlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJv
eHkuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYnNp
dGVQb2xpY2llc0RhdGEuaCIKICNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggODdlMWI3Y2JlOGJjMjg5NTVi
N2E2MjI4YjRmNDkxZjIzM2Y1YjBhYy4uOWM2YjkyNjdmYjQ4MTMyMWNmODcwN2E3NDAyNjA5MTc0
YmZmNmM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApA
QCAtODYsNiArODYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9M
YW5ndWFnZS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhOWZiMmQwN2MxODI0ZjZk
NmMxNzA5MzYzOWE3ZWY2NTVhYTFhMjQzLi5kMDFhOTdhNjg0MWRjOWNmZWI5ZmM1ODk0YzYyMjE4
ZWMzNzRkYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTM1MzIsNiArMzUzMiw4IEBACiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5
RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRl
cm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3Rv
cmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NjJCNzQ4NDEyMEJC
QTJEMDA4MTkzMzkgLyogV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjEyMjA3OTFFQzAwRUJDRjU0IC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg7IHBhdGggPSBDbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTdBMEQ3ODYyMjIwNzkxRUQwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHA7IHBhdGggPSBD
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0ExNTA2NzIxREQ1NjI5ODAwMUY0QjU4IC8qIGNvbS5h
cHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSAiY29t
LmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgcGF0aCA9ICJEZXJpdmVkU291cmNlcy9X
ZWJLaXQyL2NvbS5hcHBsZS5XZWJLaXQucGx1Z2luLWNvbW1vbi5zYiI7IHNvdXJjZVRyZWUgPSBC
VUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTdBMUUyQTg0MUVFRkU4OEEwMDM3QTBFMCAvKiBBUElO
b3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
UElOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
QTNBQ0UxQTFFRUVGNzhDMDBBODY0QTQgLyogQVBJSW5qZWN0ZWRCdW5kbGVQYWdlTG9hZGVyQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSUluamVjdGVkQnVuZGxl
UGFnZUxvYWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU1MSw2
ICszNTUzLDkgQEAKIAkJN0E5Q0Q4QzIxQzc3OUFENjAwRDlGNkM3IC8qIFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdBQjZFQTQ0MUVFQUFFMjMwMDAzN0IyQiAvKiBBUElJY29uRGF0YWJhc2VD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSWNvbkRhdGFiYXNl
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBQjZFQTQ2MUVFQUI2QjAw
MDAzN0IyQiAvKiBBUElHZW9sb2NhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJN0FDRTgyRTcyMjFDQUUwNjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuaDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdBQ0U4MkU4MjIxQ0FF
MDcwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cDsgcGF0aCA9IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTkyMjFERTcyMjAwMERBOTRDIC8qIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW07IHBhdGggPSBDbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3QUYyMzYxRTFFNzlBM0I0MDA0MzhBMDUgLyogV2ViRXJyb3JzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkVycm9ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjFGMUU3OUEzRDgwMDQzOEEwNSAvKiBXZWJFcnJvcnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXJyb3JzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjIzNjIyMUU3OUE0MzEwMDQzOEEwNSAvKiBXZWJFcnJv
cnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkVy
cm9yc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzcwMSw3ICszNzA2
LDYgQEAKIAkJODM3MkRCMjYxQTY3NTYyODAwQzY5N0M1IC8qIFdlYlBhZ2VEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJQ
YWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4MzcyREIyNzFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlBhZ2VEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzcyREIy
RTFBNjc3RDRBMDBDNjk3QzUgLyogV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJODM3QTY2MDAyMEUyQUQ4NDAwQTlE
QkQ4IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZUNvY29hLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjYy
MUE2OEIzNDIwMDMwRjM4NiAvKiBBUElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4Mzg5MUI2ODFBNjhCRUJDMDAzMEYzODYgLyog
X1dLRGlhZ25vc3RpY0xvZ2dpbmdEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTgzODkxQjZBMUE2OEMzMEIwMDMwRjM4NiAvKiBEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTMyOCw3ICs1MzMy
LDYgQEAKIAkJCQlDREEyOUExRTFDQkVCNUZCMDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFu
YWdlclByb3h5LmggKi8sCiAJCQkJQ0RBMjlBMjIxQ0JFQjYxQTAwOTAxQ0NGIC8qIFBsYXliYWNr
U2Vzc2lvbk1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKIAkJCQlDREEyOUExRjFDQkVCNUZC
MDA5MDFDQ0YgLyogUGxheWJhY2tTZXNzaW9uTWFuYWdlclByb3h5Lm1tICovLAotCQkJCTgzN0E2
NjAwMjBFMkFEODQwMEE5REJEOCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVD
b2NvYS5tbSAqLywKIAkJCQk1Q0E5ODU0QjIxMEJFQjczMDA1N0VCNkIgLyogU2FmZUJyb3dzaW5n
V2FybmluZ0NvY29hLm1tICovLAogCQkJCTFBMDAyRDQ3MTk2QjM0NUQwMEI5QUQ0NCAvKiBTZXNz
aW9uU3RhdGVDb2RpbmcuaCAqLywKIAkJCQkxQTAwMkQ0NjE5NkIzNDVEMDBCOUFENDQgLyogU2Vz
c2lvblN0YXRlQ29kaW5nLm1tICovLApAQCAtNjkzMCwxMCArNjkzMywxNSBAQAogCQk3QTg0M0Ex
RDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCAqLywKKwkJCQk3QTBENzg2MTIyMDc5
MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLywK
IAkJCQk3QUZCRDM2NDIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlLmNwcCAqLywKIAkJCQk3QUZCRDM2NTIxRTUxQkFCMDA1REJBQ0IgLyogUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmggKi8sCiAJCQkJN0FGQkQzNjkyMUU1NDJFODAw
NURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5jcHAgKi8s
CiAJCQkJN0FGQkQzNjgyMUU1NDJFODAwNURCQUNCIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZS5oICovLAorCQkJCTdBQ0U4MkU4MjIxQ0FFMDcwMDBEQTk0QyAvKiBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwICovLAorCQkJCTdBQ0U4MkU3MjIxQ0FFMDYw
MDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCAqLywKKwkJCQk3QUNFODJF
OTIyMURFNzIyMDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0g
Ki8sCiAJCQkJN0E0MUU5RkEyMUY4MURBQzAwQjg4Q0RCIC8qIFNob3VsZEdyYW5kZmF0aGVyU3Rh
dGlzdGljcy5oICovLAogCQkJCTdBM0ZFQ0ExMjFGN0MwOTcwMEYyNjdDRCAvKiBTdG9yYWdlQWNj
ZXNzU3RhdHVzLmggKi8sCiAJCQkJN0E4NDNBMUEyMUU0MUZCMjAwREVGNjYzIC8qIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCkBAIC05NjEyLDYgKzk2MjAsNyBAQAogCQkJ
CTdDMzYxRDc5MTkyODAzQkQwMDM2QTU5RCAvKiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNTczOUJCRDFCNDIwNDJEMDBEMjU4QzEg
LyogV2ViVXNlck1lZGlhQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0VFNTc1QzFEQjdE
NjExMDBDNzRDNTAgLyogV2ViVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU3MkZENDQzMjIyNjVDRTIwMEExRUNDMyAvKiBXZWJWaWV3RGlkTW92ZVRvV2luZG93
T2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERkM3REJCMUJDQ0MxOTUwMEMxNTQ4QyAv
KiBXZWJWaWV3SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjlDRDU1QUExMjhFMjk0RjAwMTMz
Qzg1IC8qIFdLQWNjZXNzaWJpbGl0eVdlYlBhZ2VPYmplY3RCYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyOTIzMkRGNDE4QjI5RDY4MDBEMDU5NkYgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9i
amVjdE1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzQ4LDcgKzk3NTcsNiBAQAogCQkJCUM1NDI1
NkJBMThCRUMxOEMwMERFNDE3OSAvKiBXS0Zvcm1TZWxlY3RDb250cm9sLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjA4Q0Y1MjFENjNDMTNBMDBCNDhERjEgLyogV0tGb3JtU2VsZWN0UGlja2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjA4Q0Y1NDFENjNDMTQwMDBCNDhERjEgLyogV0tGb3JtU2Vs
ZWN0UG9wb3Zlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTcyRkQ0NDMyMjI2NUNFMjAwQTFFQ0Mz
IC8qIFdlYlZpZXdEaWRNb3ZlVG9XaW5kb3dPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNFNDY5NUExMjE0RURGNDAwMEI5OEVCIC8qIFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMzdERkE3MDAxODEwQkI5MjAwMUY0QTlGIC8qIFdLRm91bmRhdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMDEzOUIxMTBGQTQyMDAwM0I4QTY3IC8qIFdLRnJh
bWUuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363578</attachid>
            <date>2019-03-04 18:23:15 -0800</date>
            <delta_ts>2019-03-04 19:00:36 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-194867-20190304182314.patch</filename>
            <type>text/plain</type>
            <size>285136</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyNDA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzFhNDFiYzdiZjQ0MjFk
ZjBmMWZhYTE1Njg5MzdlYzcxNWU0NmI1Mi4uZTA0OGVjNzUwMGMzNjAzOGE2NTlkNzlkMmQ3Yzk3
OTNhZTI1ODYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE5LTAyLTIxICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBhIFNRTGl0ZSBk
YXRhYmFzZSB0byBob2xkIHRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDg2NworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjQyNDA4NTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVt
ZXouCisKKyAgICAgICAgQWRkIGEgbmV3IHJ1bnRpbWUgZmVhdHVyZSBmbGFnIHRvIHN1cHBvcnQg
dXNlIG9mIGFuIGV4cGVyaW1lbnRhbCBkYXRhYmFzZQorICAgICAgICBiYWNrLWVuZC4gQWxzbyBl
eHBvc2Ugc29tZSBTUUxpdGUgZnVuY3Rpb24gY2FsbHMgZm9yIHVzZSBvdXRzaWRlIG9mIFdlYkNv
cmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHksIHNvIG5vIG5ldyB0ZXN0
cy4KKworICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0SXRwRGF0YWJhc2VNb2RlRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjppdHBEYXRhYmFz
ZU1vZGVFbmFibGVkIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50Lmg6CisKIDIwMTkt
MDMtMDQgIEp1c3RpbiBGYW4gIDxqdXN0aW5fZmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2Vi
IEdQVV0gQmxpdHRpbmcgZnVuY3Rpb24gcHJvdG90eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1MTYzNWMyMDQy
ODcyY2MxN2I4YWFkZTE1YzZhNzhhZjNjMWQ5NDY4Li5mZTRkZDdhYTM1NDkwNzNkZGZjMDU4Yzk5
OTkyZGQ3MzU3OTZiMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4MyBAQAorMjAxOS0wMi0yMSAg
QnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgYSBTUUxp
dGUgZGF0YWJhc2UgdG8gaG9sZCB0aGUgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBkYXRhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTQ4NjcKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzI0MjQwODU0PgorCisgICAgICAgIFJldmlld2VkIGJ5IENocmlz
IER1bWV6LgorCisgICAgICAgIFRoZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIGRhdGFiYXNlIHBs
aXN0IGlzIGluZWZmaWNpZW50LiBJdCByZXF1aXJlcyBtb3JlIG1lbW9yeSB1c2UKKyAgICAgICAg
dGhhbiBpdCBuZWVkcywgYW5kIGZvcmNlcyBsb3RzIG9mIGxvb3BpbmcgYW5kIHN0cmluZyBjb21w
YXJpc29ucyB0byBmaW5kIGluZm9ybWF0aW9uLgorCisgICAgICAgIFRoaXMgcHJvYmxlbSBoYXMg
YWxyZWFkeSBiZWVuIHNvbHZlZCBpbiB0aGUgZm9ybSBvZiByZWxhdGlvbmFsIGRhdGFiYXNlcy4g
V2UgdXNlIHRoZW0KKyAgICAgICAgZWxzZXdoZXJlIGluIFdlYktpdCwgYW5kIHNob3VsZCBkbyBz
byBmb3IgdGhpcyBzdG9yYWdlIGFzIHdlbGwuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjcmVhdGVz
IGFuIG9wdGlvbmFsIFNRTGl0ZSBkYXRhYmFzZSB0byBoYW5kbGUgSVRQIG9wZXJhdGlvbnMuCisK
KyAgICAgICAgMS4gSXQgYWRkcyBhIG5ldyBpbnRlcm5hbCBleHBlcmltZW50YWwgZmVhdHVyZSBm
bGFnIHRvIGFjdGl2YXRlIGl0LiBJdCByZXF1aXJlcyB0aGUgdXNlcgorICAgICAgICAgICBleGl0
IGFuZCByZXN0YXJ0IHRoZSBwcm9jZXNzIHRvIHRha2UgZWZmZWN0LgorICAgICAgICAyLiBJdCBw
b3B1bGF0ZXMgaXRzZWxmIGZyb20gdGhlIGV4aXN0aW5nIHBsaXN0IGZpbGUgKGlmIGl0IGV4aXN0
cykuCisgICAgICAgIDMuIEl0IHN0b3BzIHVzaW5nIHRoZSBwbGlzdCBpbiBmYXZvciBvZiB0aGUg
ZGF0YWJhc2UuCisgICAgICAgIDQuIEl0IGRvZXMgcXVlcmllcyBhbmQgb3RoZXIgb3BlcmF0aW9u
cyB1c2luZyB0aGUgZGF0YWJhc2UgaW5zdGVhZCBvZiB0aGUgb2xkIGhhc2ggdGFibGUKKyAgICAg
ICAgICAgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWZhY3RvcnMgdGhl
IGV4aXNpdGluZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgY2xhc3MgaW50byBh
IGJhc2UKKyAgICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGNsYXNzLCB3aGljaCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgaXMgYmFzZWQgb24uCisgICAgICAgIEl0
IGFkZHMgYSBuZXcgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUgdGhhdCBpcyBp
bXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBTUUwKKyAgICAgICAgb3BlcmF0aW9ucy4KKworICAgICAg
ICBUaGVzZSBjb2RlIGNoYW5nZXMgc2hvdWxkIG5vdCBoYXZlIGFueSBpbXBhY3Qgb24gZXhpc3Rp
bmcgb3BlcmF0aW9ucywgYW5kIHdoZW4gZW5hYmxlZAorICAgICAgICBzaG91bGQgcHJvZHVjZSB0
aGUgc2FtZSB0ZXN0IHJlc3VsdHMuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjcmVhdGVTY2hlbWEpOgorICAgICAgICAoV2Vi
S2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVu
dHMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVsYXRpb25zaGlwRXhpc3RzIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydERv
bWFpblJlbGF0aW9uc2hpcCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0IGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRvbWFpbklE
RnJvbVN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5SZWxhdGlvbnNoaXBzKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmRhdGFiYXNlSXNFbXB0
eSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0
cnkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMpOgorICAgICAg
ICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVjdXJzaXZl
bHlGaW5kTm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKToKKyAg
ICAgICAgKFdlYktpdDo6YnVpbGRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRv
UHJldmFsZW50KToKKyAgICAgICAgKFdlYktpdDo6bGlzdFRvU3RyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmZpbmROb3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnJlY2xhc3NpZnlSZXNvdXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNv
dXJjZXMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhhc1N0b3Jh
Z2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9w
ZW5lcik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbmRm
YXRoZXJEYXRhRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjplbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bG9nRnJhbWVOYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dTdWJyZXNvdXJjZVJl
ZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
U3RvcmU6OnNldFVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24pOgorICAgICAgICAo
V2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJVc2VySW50
ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERv
bWFpbnNBc1ByZXZhbGVudCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcmVkaWNh
dGVWYWx1ZUZvckRvbWFpbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1ByZXZhbGVudFJlc291cmNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzVmVyeVBy
ZXZhbGVudFJlc291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
Ojppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNSZWRpcmVj
dGluZ1RvIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0R3JhbmRmYXRoZXJlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc0dy
YW5kZmF0aGVyZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8p
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVj
dFRvKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKToKKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclByaW1hcnlEb21haW4pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y29va2llVHJlYXRtZW50Rm9yT3JpZ2luIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omhh
c1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQpOgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2sgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6dXBkYXRlQ29va2llQmxvY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKToK
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3MgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJldmFs
ZW50RG9tYWlucyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6Y2xlYXJF
eHBpcmVkVXNlckludGVyYWN0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhckdyYW5kZmF0aGVyaW5nKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnRvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcik6CisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjp1cGRhdGVMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2Up
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cmVtb3ZlQWxsU3RvcmFnZUFjY2Vzcyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzRW1wdHkg
Y29uc3QpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Omlu
Y3JlbWVudFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291
cmNlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c3luY1N0b3JhZ2VJZk5lZWRlZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbmRmYXRoZXJEYXRh
Rm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnRvZGF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2ggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGlu
Z0RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjptZXJnZU9wZXJhdGluZ0RhdGVzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Y29tcHV0ZUltcG9ydGFuY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6On5SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRh
dGFSZWNvcmRzV2VyZVNjYW5uZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3Rv
cmU6OnJlbW92ZURhdGFSZWNvcmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpwcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNv
cmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9y
RGVidWdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc01lbW9yeVN0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVj
ZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNaW5pbXVtVGltZUJl
dHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0Q2FjaGVNYXhBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnVwZGF0ZUNhY2hlTWF4QWdlQ2FwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpz
ZXRBZ2VDYXBGb3JDbGllbnRTaWRlQ29va2llcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6dXBkYXRlQ2xpZW50U2lkZUNvb2tp
ZXNBZ2VDYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnNob3VsZFJlbW92ZURhdGFSZWNvcmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRE
YXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OmRlYnVn
TG9nRG9tYWluc0luQmF0Y2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZO
ZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6Omhhc1N0YXRpc3RpY3NFeHBpcmVkIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRNYXhT
dGF0aXN0aWNzRW50cmllcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXNl
dFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1Rlc3RpbmdFdmVudCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmg6CisgICAg
ICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
aXNEZWJ1Z01vZGVFbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzdG9yZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Rv
cmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXREZWJ1Z0xvZ2dnaW5nRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OmRvbWFpbnNUb1N0cmluZyk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGlu
Z0RhdGU6OmZyb21XYWxsVGltZSk6CisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6OnRv
ZGF5KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2gg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpPcGVyYXRpbmdEYXRlOjpvcGVyYXRvcj09IGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8IGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6T3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I8PSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmNvbXB1dGVJ
bXBvcnRhbmNlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKToKKyAgICAgICAgKFdl
YktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRTaG91bGRDbGFzc2lmeVJlc291
cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVEYXRhUmVjb3Jkcyk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0
YXRpc3RpY3NBbmREYXRhUmVjb3Jkcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKToKKyAgICAgICAg
KFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9kZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vz
c2luZ1JlcXVlc3RJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0TWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRHcmFuZGZhdGhl
cmluZ1RpbWUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OnNldENhY2hlTWF4QWdlQ2FwKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjp1cGRhdGVDYWNoZU1heEFnZUNhcCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMpOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0ZUNsaWVu
dFNpZGVDb29raWVzQWdlQ2FwKToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzaG91bGRSZW1vdmVEYXRhUmVjb3JkcyBjb25zdCk6CisgICAgICAgIChXZWJL
aXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGF0YVJlY29yZHNCZWluZ1JlbW92
ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnVwZGF0
ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJCbG9ja2luZ1N0YXRlRm9yRG9tYWlucyk6CisgICAgICAg
IChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3Mg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN0
YXRpc3RpY3NFcGlyYXRpb25UaW1lIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKToKKyAgICAgICAgKFdlYktp
dDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppbmNsdWRlVG9kYXlBc09wZXJhdGluZ0Rh
dGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6aGFzU3RhdGlzdGljc0V4cGlyZWQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKToKKyAgICAg
ICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNE
b3duVG8pOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJl
c2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVGVzdGluZ0V2ZW50KToKKyAgICAgICAgKFdlYktpdDo6
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZW1vdmVBbGxTdG9yYWdlQWNjZXNzKToKKyAg
ICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3
b3JrUHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6ZGVidWdMb2dEb21haW5zSW5CYXRjaGVzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlLmguCisgICAgICAgIChXZWJLaXQ6Ok9wZXJhdGluZ0RhdGU6Ok9wZXJhdGlu
Z0RhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omlz
RW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmRhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OmlzRGVidWdNb2RlRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c3RvcmUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0RGVi
dWdMb2dnZ2luZ0VuYWJsZWQpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW06IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVD
b2NvYS5tbS4KKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpy
ZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9D
bGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Tm90aWZ5UGFnZXNXaGVu
RGF0YVJlY29yZHNXZXJlU2Nhbm5lZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVj
b3Jkc1JlbW92YWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpmbHVz
aEFuZERlc3Ryb3lQZXJzaXN0ZW50U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFBy
ZXZhbGVudFJlc291cmNlRm9yRGVidWdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZVN0YXRpc3RpY3NBbmREYXRhUmVjb3Jkc1By
b2Nlc3NpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6Omhhc1N0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVy
T3BlbmVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpncmFudFN0b3JhZ2VBY2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnBlcmZvcm1EYWlseVRhc2tzKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExv
YWRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OmxvZ1N1YnJlc291cmNlTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhclVz
ZXJJbnRlcmFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRMYXN0U2Vlbik6CisgICAgICAgIChXZWJLaXQ6
OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50UmVzb3VyY2UpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFZlcnlQ
cmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNQcmV2YWxlbnRSZXNvdXJjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJl
ZEFzU3VicmVzb3VyY2VVbmRlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGly
ZWN0aW5nVG8pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzR3JhbmRmYXRoZXJlZCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJhbWVV
bmRlclRvcEZyYW1lT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW4pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZyb20pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ29va2llQmxvY2tpbmdVcGRh
dGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNj
aGVkdWxlQ29va2llQmxvY2tpbmdVcGRhdGVGb3JEb21haW5zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFyQmxvY2tpbmdTdGF0
ZUZvckRvbWFpbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdU
aW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
ZXRNYXhTdGF0aXN0aWNzRW50cmllcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJ1bmVFbnRyaWVzRG93blRvKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNldFBhcmFtZXRlcnNUb0RlZmF1
bHRWYWx1ZXMpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIFBs
YXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllcjo6Y2FsY3Vs
YXRlUmVzb3VyY2VQcmV2YWxlbmNlKToKKyAgICAgICAgKiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmg6CisgICAgICAgICogU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzLnlhbWw6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNl
c0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6
ZU5ldHdvcmtQcm9jZXNzKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAz
LTA0ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvbnRlbnRD
aGFuZ2VPYnNlcnZlcl0gSW50cm9kdWNlIGZpeGVkIGR1cmF0aW9uIGNvbnRlbnQgb2JzZXJ2YXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5kZXgg
NTRmYjZiYjc5MDFhZTFkZGE0MmU3N2NlZmUzN2FkNDljYjZlODg5Yi4uOWVhMjY5OGYxZmRjOGU3
OWVmYjQyOWNmODczZDI0ZjgwZDU0OWVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTE0OCw2ICsxNDgsOSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRJdHBEZWJ1Z01vZGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXRwRGVidWdNb2Rl
ID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpdHBEZWJ1Z01vZGVFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pdHBEZWJ1Z01vZGU7IH0KIAorICAgIHZvaWQgc2V0SXNJVFBEYXRhYmFzZUVuYWJs
ZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc0lUUERhdGFiYXNlRW5hYmxlZCA9IGlzRW5hYmxlZDsg
fQorICAgIGJvb2wgaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzSVRQ
RGF0YWJhc2VFbmFibGVkOyB9CisKICAgICB2b2lkIHNldFJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VB
Y2Nlc3MoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1Jlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3Mg
PSBpc0VuYWJsZWQ7IH0KICAgICBib29sIHJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoKSBj
b25zdCB7IHJldHVybiBtX2lzUmVzdHJpY3RlZEhUVFBSZXNwb25zZUFjY2VzczsgfQogCkBAIC01
MzQsNiArNTM3LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fbW91c2Vtb3ZlRXZlbnRIYW5kbGlu
Z1ByZXZlbnRzRGVmYXVsdEVuYWJsZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAKKyAgICBib29sIG1f
aXNJVFBEYXRhYmFzZUVuYWJsZWQgeyBmYWxzZSB9OworCiAgICAgZnJpZW5kIGNsYXNzIFdURjo6
TmV2ZXJEZXN0cm95ZWQ8UnVudGltZUVuYWJsZWRGZWF0dXJlcz47CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCmluZGV4IDQwZmNlMDY0NDA0NTEz
NzRkNDY0OTMwYWY0NmM5MDc3M2UzZjg2YTQuLjY0M2QyNDI2NzY5ZmY0MDA0MTg5YThmNjY5MGVi
MWQ0MzA2YWIyYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIHRhYmxlRXhpc3RzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJBbGxUYWJs
ZXMoKTsKLSAgICBpbnQgcnVuVmFjdXVtQ29tbWFuZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIGlu
dCBydW5WYWN1dW1Db21tYW5kKCk7CiAgICAgaW50IHJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFu
ZCgpOwogICAgIAogICAgIGJvb2wgdHJhbnNhY3Rpb25JblByb2dyZXNzKCkgY29uc3QgeyByZXR1
cm4gbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVTdGF0ZW1lbnQuaAppbmRleCBhMTkzZDhjMjRiMGJkMDI0OTY1YmIxMDU0NDY0
MjNiYmM4ZjViZmU5Li5mMzY2YzczMDJmNGJhNWE1ZjRhYzFhNjFjMTYyNjMzMTM5MzJkM2Q3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5oCkBAIC03
Niw3ICs3Niw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZ2V0Q29sdW1uTmFtZShpbnQgY29sKTsK
ICAgICBTUUxWYWx1ZSBnZXRDb2x1bW5WYWx1ZShpbnQgY29sKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgZ2V0Q29sdW1uVGV4dChpbnQgY29sKTsKLSAgICBkb3VibGUgZ2V0Q29sdW1uRG91
YmxlKGludCBjb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBnZXRDb2x1bW5Eb3VibGUo
aW50IGNvbCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgaW50IGdldENvbHVtbkludChpbnQgY29sKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBpbnQ2NF90IGdldENvbHVtbkludDY0KGludCBjb2wpOwogICAg
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBnZXRDb2x1bW5CbG9iQXNTdHJpbmcoaW50IGNvbCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MmM4ZTk0YzNkMjcxMTkyM2E3ZjUyMGM2YjcxYmJmZjA0NTc4ZmEwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVy
L1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtMCwwICsxLDE1NTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCIKKworI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1Nl
c3Npb24uaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgorI2luY2x1ZGUgIlBs
dWdpblByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVs
ZW1ldHJ5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lv
bi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU1FMaXRlRGF0YWJhc2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZVN0
YXRlbWVudC5oPgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvRGF0ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1N0ZFNldC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2RlZmluZSBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pIFJFTEVBU0VfTE9HX0lGKHNlc3Npb25JRC5p
c0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0aGlzLCAjI19fVkFfQVJHU19fKQorI2RlZmlu
ZSBSRUxFQVNFX0xPR19FUlJPUl9JRl9BTExPV0VEKHNlc3Npb25JRCwgZm10LCAuLi4pIFJFTEVB
U0VfTE9HX0VSUk9SX0lGKHNlc3Npb25JRC5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OiIgZm10LCB0
aGlzLCAjI19fVkFfQVJHU19fKQorI2Vsc2UKKyNkZWZpbmUgUkVMRUFTRV9MT0dfSUZfQUxMT1dF
RChzZXNzaW9uSUQsIGZtdCwgLi4uKSAgKCh2b2lkKTApCisjZGVmaW5lIFJFTEVBU0VfTE9HX0VS
Uk9SX0lGX0FMTE9XRUQoc2Vzc2lvbklELCBmbXQsIC4uLikgICgodm9pZCkwKQorI2VuZGlmCisK
K2NvbnN0ZXhwciBhdXRvIG9ic2VydmVkRG9tYWluQ291bnRRdWVyeSA9ICJTRUxFQ1QgQ09VTlQo
KikgRlJPTSBPYnNlcnZlZERvbWFpbnMiX3M7Citjb25zdGV4cHIgYXV0byBpbnNlcnRPYnNlcnZl
ZERvbWFpblF1ZXJ5ID0gIklOU0VSVCBJTlRPIE9ic2VydmVkRG9tYWlucyAocmVnaXN0cmFibGVE
b21haW4sIGxhc3RTZWVuLCBoYWRVc2VySW50ZXJhY3Rpb24sIgorICAgICJtb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZSwgZ3JhbmRmYXRoZXJlZCwgaXNQcmV2YWxlbnQsIGlzVmVyeVByZXZh
bGVudCwgZGF0YVJlY29yZHNSZW1vdmVkLCB0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9V
c2VySW50ZXJhY3Rpb24sIgorICAgICJ0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9y
YWdlQWNjZXNzQVBJKSBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8pIl9zOwor
Y29uc3RleHByIGF1dG8gaW5zZXJ0VG9wTGV2ZWxEb21haW5RdWVyeSA9ICJJTlNFUlQgSU5UTyBU
b3BMZXZlbERvbWFpbnMgVkFMVUVTICg/KSJfczsKK2NvbnN0ZXhwciBhdXRvIGRvbWFpbklERnJv
bVN0cmluZ1F1ZXJ5ID0gIlNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVS
RSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdG9yYWdlQWNjZXNz
VW5kZXJUb3BGcmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgSU5UTyBTdG9yYWdlQWNjZXNzVW5k
ZXJUb3BGcmFtZURvbWFpbnMgKGRvbWFpbklELCB0b3BMZXZlbERvbWFpbklEKSAiCisgICAgIlNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9PSA/Il9zOworY29uc3RleHByIGF1dG8gdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1
ZXJ5ID0gIklOU0VSVCBJTlRPIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKHNvdXJjZURvbWFp
bklELCB0b0RvbWFpbklEKSBTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPT0gPyJfczsKK2NvbnN0ZXhwciBhdXRvIHRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBG
Uk9NIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gV0hFUkUgc291cmNlRG9tYWluSUQgPSA/ICIK
KyAgICAiQU5EIHRvRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21h
aW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8gdG9w
RnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIElOVE8gVG9wRnJhbWVVbmlx
dWVSZWRpcmVjdHNGcm9tICh0YXJnZXREb21haW5JRCwgZnJvbURvbWFpbklEKSAiCisgICAgIlNF
TEVDVCA/LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb21F
eGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RzRnJvbSBXSEVSRSB0YXJnZXREb21haW5JRCA9ID8gIgorICAgICJBTkQgZnJvbURv
bWFpbklEID0gKFNFTEVDVCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8pKSJfczsKK2NvbnN0ZXhwciBhdXRvIHN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnNRdWVyeSA9ICJJTlNFUlQgSU5UTyBTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21h
aW5zIChzdWJGcmFtZURvbWFpbklELCB0b3BGcmFtZURvbWFpbklEKSAiCisgICAgIlNFTEVDVCA/
LCBkb21haW5JRCBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9
ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHNR
dWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIFN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMgV0hFUkUgc3ViRnJhbWVEb21haW5JRCA9ID8gIgorICAgICJBTkQgdG9wRnJhbWVE
b21haW5JRCA9IChTRUxFQ1QgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVn
aXN0cmFibGVEb21haW4gPSA/KSkiX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zUXVlcnkgPSAiSU5TRVJUIElOVE8gU3VicmVzb3VyY2VVbmRlclRvcEZy
YW1lRG9tYWlucyAoc3VicmVzb3VyY2VEb21haW5JRCwgdG9wRnJhbWVEb21haW5JRCkgIgorICAg
ICJTRUxFQ1QgPywgZG9tYWluSUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFi
bGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gc3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBTdWJyZXNv
dXJjZVVuZGVyVG9wRnJhbWVEb21haW5zICIKKyAgICAiV0hFUkUgc3VicmVzb3VyY2VEb21haW5J
RCA9ID8gQU5EIHRvcEZyYW1lRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2
ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1
dG8gc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5ID0gIklOU0VSVCBJTlRPIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8gKHN1YnJlc291cmNlRG9tYWluSUQsIHRvRG9tYWluSUQp
ICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJFIHJl
Z2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c1RvRXhpc3RzUXVlcnkgPSAiU0VMRUNUIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgPSA/
ICIKKyAgICAiQU5EIHRvRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWRE
b21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3RleHByIGF1dG8g
c3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tUXVlcnkgPSAiSU5TRVJUIElOVE8gU3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tIChzdWJyZXNvdXJjZURvbWFpbklELCBmcm9tRG9tYWlu
SUQpICIKKyAgICAiU0VMRUNUID8sIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21haW5zIFdIRVJF
IHJlZ2lzdHJhYmxlRG9tYWluID09ID8iX3M7Citjb25zdGV4cHIgYXV0byBzdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHNRdWVyeSA9ICJTRUxFQ1QgRVhJU1RTIChTRUxFQ1QgMSBG
Uk9NIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbSBXSEVSRSBzdWJyZXNvdXJjZURvbWFp
bklEID0gPyAiCisgICAgIkFORCBmcm9tRG9tYWluSUQgPSAoU0VMRUNUIGRvbWFpbklEIEZST00g
T2JzZXJ2ZWREb21haW5zIFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPykpIl9zOworY29uc3Rl
eHByIGF1dG8gbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5ID0gIlVQREFURSBPYnNlcnZl
ZERvbWFpbnMgU0VUIGhhZFVzZXJJbnRlcmFjdGlvbiA9ID8sIG1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gPyAiCisgICAgIldIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2Nv
bnN0ZXhwciBhdXRvIHVwZGF0ZUxhc3RTZWVuUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlu
cyBTRVQgbGFzdFNlZW4gPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJfczsKK2NvbnN0
ZXhwciBhdXRvIHVwZGF0ZVByZXZhbGVudFJlc291cmNlUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVk
RG9tYWlucyBTRVQgaXNQcmV2YWxlbnQgPSA/IFdIRVJFIHJlZ2lzdHJhYmxlRG9tYWluID0gPyJf
czsKK2NvbnN0ZXhwciBhdXRvIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSA9ICJTRUxFQ1QgaXNQ
cmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/
Il9zOworY29uc3RleHByIGF1dG8gdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlUXVlcnkgPSAi
VVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgaXNWZXJ5UHJldmFsZW50ID0gPyBXSEVSRSByZWdp
c3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0byBpc1ZlcnlQcmV2YWxlbnRSZXNv
dXJjZVF1ZXJ5ID0gIlNFTEVDVCBpc1ZlcnlQcmV2YWxlbnQgRlJPTSBPYnNlcnZlZERvbWFpbnMg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3RleHByIGF1dG8gY2xlYXJQcmV2
YWxlbnRSZXNvdXJjZVF1ZXJ5ID0gIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGlzUHJldmFs
ZW50ID0gMCwgaXNWZXJ5UHJldmFsZW50ID0gMCBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8i
X3M7Citjb25zdGV4cHIgYXV0byBoYWRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgaGFk
VXNlckludGVyYWN0aW9uLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSBGUk9NIE9ic2Vy
dmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURvbWFpbiA9ID8iX3M7Citjb25zdGV4cHIgYXV0
byB1cGRhdGVHcmFuZGZhdGhlcmVkUXVlcnkgPSAiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQg
Z3JhbmRmYXRoZXJlZCA9ID8gV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3Rl
eHByIGF1dG8gaXNHcmFuZGZhdGhlcmVkUXVlcnkgPSAiU0VMRUNUIGdyYW5kZmF0aGVyZWQgRlJP
TSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gPSA/Il9zOworY29uc3Rl
eHByIGF1dG8gZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25RdWVyeSA9ICJTRUxFQ1QgZG9tYWlu
SUQgRlJPTSBPYnNlcnZlZERvbWFpbnMgV0hFUkUgaGFkVXNlckludGVyYWN0aW9uID0gMSBBTkQg
bW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUgPCA/Il9zOworCitjb25zdGV4cHIgYXV0byBj
cmVhdGVPYnNlcnZlZERvbWFpbiA9ICJDUkVBVEUgVEFCTEUgT2JzZXJ2ZWREb21haW5zICgiCisg
ICAgImRvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIHJlZ2lzdHJhYmxlRG9tYWluIFRFWFQg
Tk9UIE5VTEwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGxhc3RTZWVuIFJFQUwgTk9UIE5VTEws
ICIKKyAgICAiaGFkVXNlckludGVyYWN0aW9uIElOVEVHRVIgTk9UIE5VTEwsIG1vc3RSZWNlbnRV
c2VySW50ZXJhY3Rpb25UaW1lIFJFQUwgTk9UIE5VTEwsIGdyYW5kZmF0aGVyZWQgSU5URUdFUiBO
T1QgTlVMTCwgIgorICAgICJpc1ByZXZhbGVudCBJTlRFR0VSIE5PVCBOVUxMLCBpc1ZlcnlQcmV2
YWxlbnQgSU5URUdFUiBOT1QgTlVMTCwgZGF0YVJlY29yZHNSZW1vdmVkIElOVEVHRVIgTk9UIE5V
TEwsIgorICAgICJ0aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24g
SU5URUdFUiBOT1QgTlVMTCwgdGltZXNBY2Nlc3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFj
Y2Vzc0FQSSBJTlRFR0VSIE5PVCBOVUxMKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVh
dGVUb3BMZXZlbERvbWFpbnMgPSAiQ1JFQVRFIFRBQkxFIFRvcExldmVsRG9tYWlucyAoIgorICAg
ICJ0b3BMZXZlbERvbWFpbklEIElOVEVHRVIgUFJJTUFSWSBLRVksIENPTlNUUkFJTlQgZmtEb21h
aW5JRCBGT1JFSUdOIEtFWSh0b3BMZXZlbERvbWFpbklEKSAiCisgICAgIlJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29u
c3RleHByIGF1dG8gY3JlYXRlU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zID0gIkNS
RUFURSBUQUJMRSBTdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIKKyAgICAiZG9t
YWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wTGV2ZWxEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
IE9OIENPTkZMSUNUIEZBSUwsICIKKyAgICAiQ09OU1RSQUlOVCBma0RvbWFpbklEIEZPUkVJR04g
S0VZKGRvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9tYWlucyhkb21haW5JRCkgT04gREVM
RVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9wTGV2ZWxEb21haW5JRCkgUkVGRVJF
TkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NBREUp
OyJfczsKKyAgICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8gPSAiQ1JFQVRFIFRBQkxFIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8gKCIKKyAgICAic291
cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9Eb21haW5JRCBJTlRFR0VSIE5PVCBOVUxM
LCAiCisgICAgIkZPUkVJR04gS0VZKHNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVs
RG9tYWlucyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAgICJGT1JF
SUdOIEtFWSh0b0RvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlucyh0b3BMZXZlbERv
bWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29uc3RleHByIGF1dG8gY3Jl
YXRlVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tID0gIkNSRUFURSBUQUJMRSBUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb20gKCIKKyAgICAidGFyZ2V0RG9tYWluSUQgSU5URUdFUiBOT1QgTlVM
TCwgZnJvbURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkodGFy
Z2V0RG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxEb21haW5zKHRvcExldmVsRG9tYWluSUQp
IE9OIERFTEVURSBDQVNDQURFLCAiCisgICAgIkZPUkVJR04gS0VZKGZyb21Eb21haW5JRCkgUkVG
RVJFTkNFUyBUb3BMZXZlbERvbWFpbnModG9wTGV2ZWxEb21haW5JRCkgT04gREVMRVRFIENBU0NB
REUpOyJfczsKKyAgICAKK2NvbnN0ZXhwciBhdXRvIGNyZWF0ZVN1YmZyYW1lVW5kZXJUb3BGcmFt
ZURvbWFpbnMgPSAiQ1JFQVRFIFRBQkxFIFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMgKCIK
KyAgICAic3ViRnJhbWVEb21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCB0b3BGcmFtZURvbWFpbklE
IElOVEVHRVIgTk9UIE5VTEwsICIKKyAgICAiRk9SRUlHTiBLRVkoc3ViRnJhbWVEb21haW5JRCkg
UkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFLCAi
CisgICAgIkZPUkVJR04gS0VZKHRvcEZyYW1lRG9tYWluSUQpIFJFRkVSRU5DRVMgVG9wTGV2ZWxE
b21haW5zKHRvcExldmVsRG9tYWluSUQpIE9OIERFTEVURSBDQVNDQURFKTsiX3M7CisgICAgCitj
b25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zID0gIkNS
RUFURSBUQUJMRSBTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zICgiCisgICAgInN1YnJl
c291cmNlRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgdG9wRnJhbWVEb21haW5JRCBJTlRFR0VS
IE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNlRG9tYWluSUQpIFJFRkVS
RU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSwgIgorICAg
ICJGT1JFSUdOIEtFWSh0b3BGcmFtZURvbWFpbklEKSBSRUZFUkVOQ0VTIFRvcExldmVsRG9tYWlu
cyh0b3BMZXZlbERvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorY29uc3Rl
eHByIGF1dG8gY3JlYXRlU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyA9ICJDUkVBVEUgVEFC
TEUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbyAoIgorICAgICJzdWJyZXNvdXJjZURvbWFp
bklEIElOVEVHRVIgTk9UIE5VTEwsIHRvRG9tYWluSUQgSU5URUdFUiBOT1QgTlVMTCwgIgorICAg
ICJGT1JFSUdOIEtFWShzdWJyZXNvdXJjZURvbWFpbklEKSBSRUZFUkVOQ0VTIE9ic2VydmVkRG9t
YWlucyhkb21haW5JRCkgT04gREVMRVRFIENBU0NBREUsICIKKyAgICAiRk9SRUlHTiBLRVkodG9E
b21haW5JRCkgUkVGRVJFTkNFUyBPYnNlcnZlZERvbWFpbnMoZG9tYWluSUQpIE9OIERFTEVURSBD
QVNDQURFKTsiX3M7CisgICAgCitjb25zdGV4cHIgYXV0byBjcmVhdGVTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb20gPSAiQ1JFQVRFIFRBQkxFIFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3Rz
RnJvbSAoIgorICAgICJzdWJyZXNvdXJjZURvbWFpbklEIElOVEVHRVIgTk9UIE5VTEwsIGZyb21E
b21haW5JRCBJTlRFR0VSIE5PVCBOVUxMLCAiCisgICAgIkZPUkVJR04gS0VZKHN1YnJlc291cmNl
RG9tYWluSUQpIFJFRkVSRU5DRVMgT2JzZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUg
Q0FTQ0FERSwgIgorICAgICJGT1JFSUdOIEtFWShmcm9tRG9tYWluSUQpIFJFRkVSRU5DRVMgT2Jz
ZXJ2ZWREb21haW5zKGRvbWFpbklEKSBPTiBERUxFVEUgQ0FTQ0FERSk7Il9zOworICAgIAorUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlKFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUsIFdvcmtR
dWV1ZSYgd29ya1F1ZXVlLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRoKQorICAg
IDogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKHN0b3JlLCB3b3JrUXVldWUpCisgICAgLCBt
X3N0b3JhZ2VEaXJlY3RvcnlQYXRoKHN0b3JhZ2VEaXJlY3RvcnlQYXRoICsgIi9vYnNlcnZhdGlv
bnMuZGIiKQorICAgICwgbV9vYnNlcnZlZERvbWFpbkNvdW50KG1fZGF0YWJhc2UsIG9ic2VydmVk
RG9tYWluQ291bnRRdWVyeSkKKyAgICAsIG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQo
bV9kYXRhYmFzZSwgaW5zZXJ0T2JzZXJ2ZWREb21haW5RdWVyeSkKKyAgICAsIG1faW5zZXJ0VG9w
TGV2ZWxEb21haW5TdGF0ZW1lbnQobV9kYXRhYmFzZSwgaW5zZXJ0VG9wTGV2ZWxEb21haW5RdWVy
eSkKKyAgICAsIG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50KG1fZGF0YWJhc2UsIGRvbWFp
bklERnJvbVN0cmluZ1F1ZXJ5KQorICAgICwgbV9zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURv
bWFpbnNTdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21h
aW5zUXVlcnkpCisgICAgLCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8obV9kYXRhYmFzZSwg
dG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb1F1ZXJ5KQorICAgICwgbV90b3BGcmFtZVVuaXF1ZVJl
ZGlyZWN0c1RvRXhpc3RzKG1fZGF0YWJhc2UsIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9FeGlz
dHNRdWVyeSkKKyAgICAsIG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tKG1fZGF0YWJhc2Us
IHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5KQorICAgICwgbV90b3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb21FeGlzdHMobV9kYXRhYmFzZSwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tRXhpc3RzUXVlcnkpCisgICAgLCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMobV9k
YXRhYmFzZSwgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5KQorICAgICwgbV9zdWJm
cmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMobV9kYXRhYmFzZSwgc3ViZnJhbWVVbmRlclRv
cEZyYW1lRG9tYWluRXhpc3RzUXVlcnkpCisgICAgLCBtX3N1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnMobV9kYXRhYmFzZSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1F1ZXJ5
KQorICAgICwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMobV9kYXRhYmFz
ZSwgc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluRXhpc3RzUXVlcnkpCisgICAgLCBtX3N1
YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8obV9kYXRhYmFzZSwgc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb1F1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhp
c3RzKG1fZGF0YWJhc2UsIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9FeGlzdHNRdWVyeSkK
KyAgICAsIG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKG1fZGF0YWJhc2UsIHN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbVF1ZXJ5KQorICAgICwgbV9zdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0c0Zyb21FeGlzdHMobV9kYXRhYmFzZSwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNGcm9tRXhpc3RzUXVlcnkpCisgICAgLCBtX21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQobV9kYXRhYmFzZSwgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblF1ZXJ5KQorICAgICwg
bV91cGRhdGVMYXN0U2VlblN0YXRlbWVudChtX2RhdGFiYXNlLCB1cGRhdGVMYXN0U2VlblF1ZXJ5
KQorICAgICwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudChtX2RhdGFiYXNlLCB1
cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAgICwgbV9pc1ByZXZhbGVudFJlc291cmNl
U3RhdGVtZW50KG1fZGF0YWJhc2UsIGlzUHJldmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1f
dXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsIHVwZGF0ZVZl
cnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAgICwgbV9pc1ZlcnlQcmV2YWxlbnRSZXNvdXJj
ZVN0YXRlbWVudChtX2RhdGFiYXNlLCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVF1ZXJ5KQorICAg
ICwgbV9jbGVhclByZXZhbGVudFJlc291cmNlU3RhdGVtZW50KG1fZGF0YWJhc2UsIGNsZWFyUHJl
dmFsZW50UmVzb3VyY2VRdWVyeSkKKyAgICAsIG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50
KG1fZGF0YWJhc2UsIGhhZFVzZXJJbnRlcmFjdGlvblF1ZXJ5KQorICAgICwgbV91cGRhdGVHcmFu
ZGZhdGhlcmVkU3RhdGVtZW50KG1fZGF0YWJhc2UsIHVwZGF0ZUdyYW5kZmF0aGVyZWRRdWVyeSkK
KyAgICAsIG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50KG1fZGF0YWJhc2UsIGlzR3JhbmRmYXRo
ZXJlZFF1ZXJ5KQorICAgICwgbV9maW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudCht
X2RhdGFiYXNlLCBmaW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblF1ZXJ5KQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmVnaXN0
ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisKKyAgICBpZiAoIW1fZGF0YWJhc2Uu
b3BlbihtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJP
UihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3Bl
biBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMsIGRhdGFiYXNlIHBhdGg6ICV7cHVi
bGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpLCBtX3N0b3JhZ2VEaXJlY3Rv
cnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBTaW5jZSB3ZSBhcmUgdXNpbmcgYSB3
b3JrZXJRdWV1ZSwgdGhlIHNlcXVlbnRpYWwgZGlzcGF0Y2ggYmxvY2tzIG1heSBiZSBjYWxsZWQg
YnkgZGlmZmVyZW50IHRocmVhZHMuCisgICAgbV9kYXRhYmFzZS5kaXNhYmxlVGhyZWFkaW5nQ2hl
Y2tzKCk7CisKKyAgICBpZiAoIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIk9ic2VydmVkRG9tYWlu
cyJfcykpIHsKKyAgICAgICAgaWYgKCFjcmVhdGVTY2hlbWEoKSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMs
IGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAoIXByZXBhcmVTdGF0ZW1lbnRzKCkpIHsKKyAgICAgICAgUkVMRUFTRV9M
T0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnByZXBhcmVTdGF0ZW1lbnRzIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cywg
ZGF0YWJhc2UgcGF0aDogJXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNn
KCksIG1fc3RvcmFnZURpcmVjdG9yeVBhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgd29ya1F1ZXVl
LmRpc3BhdGNoQWZ0ZXIoNV9zLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIHsKKyAg
ICAgICAgaWYgKHdlYWtUaGlzKQorICAgICAgICAgICAgd2Vha1RoaXMtPmNhbGN1bGF0ZUFuZFN1
Ym1pdFRlbGVtZXRyeSgpOworICAgIH0pOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIGlmIChtX29i
c2VydmVkRG9tYWluQ291bnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdCA9
ICFtX29ic2VydmVkRG9tYWluQ291bnQuZ2V0Q29sdW1uSW50KDApOworICAgIAorICAgIGludCBy
ZXNldFJlc3VsdCA9IG1fb2JzZXJ2ZWREb21haW5Db3VudC5yZXNldCgpOworICAgIEFTU0VSVF9V
TlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Y3JlYXRlU2NoZW1hKCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVPYnNlcnZlZERvbWFp
bikpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIE9ic2VydmVkRG9tYWlu
cyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVUb3BMZXZlbERvbWFp
bnMpKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BMZXZlbERvbWFp
bnMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIW1fZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoY3JlYXRlU3RvcmFnZUFjY2Vz
c1VuZGVyVG9wRnJhbWVEb21haW5zKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zIHRhYmxlIGluIGRhdGFiYXNl
ICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCksIG1fZGF0YWJhc2UubGFzdEVycm9y
TXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX2RhdGFi
YXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pKSB7Cisg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fZGF0YWJhc2UubGFzdEVycm9yKCks
IG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgaWYgKCFtX2RhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKGNyZWF0ZVRvcEZyYW1lVW5p
cXVlUmVkaXJlY3RzRnJvbSkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRl
IFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMi
LCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRl
Q29tbWFuZChjcmVhdGVTdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zKSkgeworICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgU3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucyB0
YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVTdWJyZXNvdXJjZVVuZGVy
VG9wRnJhbWVEb21haW5zKSkgeworICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUg
U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0g
JXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9kYXRhYmFzZS5leGVj
dXRlQ29tbWFuZChjcmVhdGVTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
byB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX2RhdGFiYXNlLmxhc3RFcnJvcigpLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghbV9kYXRhYmFzZS5leGVjdXRlQ29tbWFuZChjcmVhdGVTdWJyZXNvdXJjZVVu
aXF1ZVJlZGlyZWN0c0Zyb20pKSB7CisgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0
ZSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zyb20gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAt
ICVzIiwgbV9kYXRhYmFzZS5sYXN0RXJyb3IoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlcGFyZVN0YXRlbWVu
dHMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICAKKyAgICBp
ZiAobV9vYnNlcnZlZERvbWFpbkNvdW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1faW5zZXJ0VG9wTGV2ZWxEb21haW5TdGF0ZW1lbnQucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJh
bWVEb21haW5zU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV90
b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20ucHJlcGFyZSgpICE9
IFNRTElURV9PSworICAgICAgICB8fCBtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbUV4aXN0
cy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3ViZnJhbWVVbmRlclRvcEZy
YW1lRG9tYWlucy5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluRXhpc3RzLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
fHwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgfHwgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMucHJl
cGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG8ucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX3N1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG9FeGlzdHMucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBt
X3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbS5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisg
ICAgICAgIHx8IG1fc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tRXhpc3RzLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVMYXN0U2VlblN0YXRlbWVudC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlv
blN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwor
ICAgICAgICB8fCBtX3VwZGF0ZVZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faXNWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2NsZWFyUHJldmFsZW50
UmVzb3VyY2VTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2hh
ZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09L
CisgICAgICAgIHx8IG1faXNHcmFuZGZhdGhlcmVkU3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKKyAgICAgICAgfHwgbV9maW5kRXhwaXJlZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5w
cmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICkgeworICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
cHJlcGFyZVN0YXRlbWVudHMgZmFpbGVkIHRvIHByZXBhcmUsIGVycm9yIG1lc3NhZ2U6ICV7cHVi
bGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aW5zZXJ0T2JzZXJ2ZWREb21haW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgbG9hZFN0
YXRpc3RpY3MpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyNpZm5kZWYg
TkRFQlVHCisgICAgQVNTRVJUKGNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3QobG9hZFN0YXRpc3Rp
Y3MucmVnaXN0cmFibGVEb21haW4pKTsKKyNlbmRpZgorCisgICAgaWYgKG1faW5zZXJ0T2JzZXJ2
ZWREb21haW5TdGF0ZW1lbnQuYmluZFRleHQoMSwgbG9hZFN0YXRpc3RpY3MucmVnaXN0cmFibGVE
b21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVk
RG9tYWluU3RhdGVtZW50LmJpbmREb3VibGUoMiwgbG9hZFN0YXRpc3RpY3MubGFzdFNlZW4uc2Vj
b25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNl
cnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDMsIGxvYWRTdGF0aXN0aWNzLmhhZFVz
ZXJJbnRlcmFjdGlvbikgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWRE
b21haW5TdGF0ZW1lbnQuYmluZERvdWJsZSg0LCBsb2FkU3RhdGlzdGljcy5tb3N0UmVjZW50VXNl
ckludGVyYWN0aW9uVGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LmJpbmRJbnQoNSwg
bG9hZFN0YXRpc3RpY3MuZ3JhbmRmYXRoZXJlZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1f
aW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1lbnQuYmluZEludCg2LCBsb2FkU3RhdGlzdGljcy5p
c1ByZXZhbGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNl
cnZlZERvbWFpblN0YXRlbWVudC5iaW5kSW50KDcsIGxvYWRTdGF0aXN0aWNzLmlzVmVyeVByZXZh
bGVudFJlc291cmNlKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9pbnNlcnRPYnNlcnZlZERv
bWFpblN0YXRlbWVudC5iaW5kSW50KDgsIGxvYWRTdGF0aXN0aWNzLmRhdGFSZWNvcmRzUmVtb3Zl
ZCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1faW5zZXJ0T2JzZXJ2ZWREb21haW5TdGF0ZW1l
bnQuYmluZEludCg5LCBsb2FkU3RhdGlzdGljcy50aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVl
VG9Vc2VySW50ZXJhY3Rpb24pICE9IFNRTElURV9PSworICAgICAgICB8fCBtX2luc2VydE9ic2Vy
dmVkRG9tYWluU3RhdGVtZW50LmJpbmRJbnQoMTAsIGxvYWRTdGF0aXN0aWNzLnRpbWVzQWNjZXNz
ZWRBc0ZpcnN0UGFydHlEdWVUb1N0b3JhZ2VBY2Nlc3NBUEkpICE9IFNRTElURV9PSykgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6aW5zZXJ0T2JzZXJ2ZWREb21haW4gZmFpbGVkIHRvIGJpbmQsIGVy
cm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygp
KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBpZiAobV9pbnNlcnRPYnNlcnZlZERvbWFpblN0YXRlbWVudC5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVw
IC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Omluc2VydE9ic2VydmVkRG9t
YWluIGZhaWxlZCB0byBjb21taXQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBt
X2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBt
X2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpyZWxh
dGlvbnNoaXBFeGlzdHMoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQsIHVuc2ln
bmVkIGZpcnN0RG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzZWNvbmREb21haW4p
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3Rh
dGVtZW50LmJpbmRJbnQoMSwgZmlyc3REb21haW5JRCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8
IHN0YXRlbWVudC5iaW5kVGV4dCgyLCBzZWNvbmREb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9P
SworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6Om1faW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwU3RhdGVtZW50IGZhaWxlZCB0
byBiaW5kLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgcmVsYXRpb25TaGlwRXhpc3RzID0gISFz
dGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50IHJlc2V0UmVzdWx0ID0gc3RhdGVt
ZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQg
PT0gU1FMSVRFX09LKTsKKyAgICAKKyAgICByZXR1cm4gcmVsYXRpb25TaGlwRXhpc3RzOworfQor
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXAoV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50JiBzdGF0ZW1lbnQsIHVuc2lnbmVk
IGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWUpCit7CisgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAoc3RhdGVtZW50LmJpbmRJbnQoMSwg
ZG9tYWluSUQpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuYmluZFRleHQoMiwg
dG9wRnJhbWUuc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3Rl
cCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmss
ICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjptX2luc2VydERvbWFp
blJlbGF0aW9uc2hpcFN0YXRlbWVudCBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtw
dWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlu
dCByZXNldFJlc3VsdCA9IHN0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVz
ZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKyNpZm5kZWYgTkRFQlVHCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpjb25maXJtRG9tYWluRG9lc05vdEV4aXN0KGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0
d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvbmZpcm1E
b21haW5Eb2VzTm90RXhpc3QgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAg
IGlmIChtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykg
eworICAgICAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVu
dC5yZXNldCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3Vs
dCA9PSBTUUxJVEVfT0spOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50
IHJlc2V0UmVzdWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAg
ICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOwor
ICAgIAorICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK3Vuc2lnbmVkIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JRChjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisg
ICAgdW5zaWduZWQgZG9tYWluSUQgPSAwOworCisgICAgaWYgKG1fZG9tYWluSURGcm9tU3RyaW5n
U3RhdGVtZW50LmJpbmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAg
ICAgIHx8IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfUk9X
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpkb21haW5JREZyb21TdHJpbmcgZmFpbGVkLCBlcnJv
ciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZG9tYWluSUQ7
CisgICAgfQorCisgICAgZG9tYWluSUQgPSBtX2RvbWFpbklERnJvbVN0cmluZ1N0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMCk7CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBtX2RvbWFpbklERnJvbVN0
cmluZ1N0YXRlbWVudC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJl
c2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgCisgICAgcmV0dXJuIGRvbWFpbklEOworfQor
Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbnNlcnREb21haW5S
ZWxhdGlvbnNoaXBzKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3MmIGxvYWRT
dGF0aXN0aWNzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0
byByZWdpc3RyYWJsZURvbWFpbklEID0gZG9tYWluSUQobG9hZFN0YXRpc3RpY3MucmVnaXN0cmFi
bGVEb21haW4pOworICAgIGZvciAoYXV0byYgdG9wRnJhbWVEb21haW4gOiBsb2FkU3RhdGlzdGlj
cy5zdG9yYWdlQWNjZXNzVW5kZXJUb3BGcmFtZURvbWFpbnMpCisgICAgICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVu
dCwgcmVnaXN0cmFibGVEb21haW5JRCwgdG9wRnJhbWVEb21haW4pOworCisgICAgZm9yIChhdXRv
JiB0b0RvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG8pCisg
ICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG8sIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvRG9tYWluKTsKKyAgICAKKyAgICBmb3IgKGF1dG8m
IGZyb21Eb21haW4gOiBsb2FkU3RhdGlzdGljcy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c0Zyb20p
CisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzRnJvbSwgcmVnaXN0cmFibGVEb21haW5JRCwgZnJvbURvbWFpbik7CisgICAgCisgICAgZm9y
IChhdXRvJiB0b3BGcmFtZURvbWFpbiA6IGxvYWRTdGF0aXN0aWNzLnN1YmZyYW1lVW5kZXJUb3BG
cmFtZURvbWFpbnMpCisgICAgICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnMsIHJlZ2lzdHJhYmxlRG9tYWluSUQsIHRvcEZyYW1lRG9tYWlu
KTsKKyAgICAKKyAgICBmb3IgKGF1dG8mIHRvcEZyYW1lRG9tYWluIDogbG9hZFN0YXRpc3RpY3Mu
c3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucykKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVs
YXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgcmVnaXN0cmFibGVE
b21haW5JRCwgdG9wRnJhbWVEb21haW4pOworICAgIAorICAgIGZvciAoYXV0byYgdG9Eb21haW4g
OiBsb2FkU3RhdGlzdGljcy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvKQorICAgICAgICBp
bnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvLCBy
ZWdpc3RyYWJsZURvbWFpbklELCB0b0RvbWFpbik7CisgICAgCisgICAgZm9yIChhdXRvJiBmcm9t
RG9tYWluIDogbG9hZFN0YXRpc3RpY3Muc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tKQor
ICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGly
ZWN0c0Zyb20sIHJlZ2lzdHJhYmxlRG9tYWluSUQsIGZyb21Eb21haW4pOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpwb3B1bGF0ZUZyb21NZW1vcnlTdG9y
ZShjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUmIG1lbW9yeVN0b3JlKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKCFpc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIHN0YXRpc3RpY3NNYXAgPSBtZW1vcnlTdG9y
ZS5kYXRhKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFw
KQorICAgICAgICBpbnNlcnRPYnNlcnZlZERvbWFpbihzdGF0aXN0aWMudmFsdWUpOworCisgICAg
Ly8gTWFrZSBhIHNlcGFyYXRlIHBhc3MgZm9yIGludGVyLWRvbWFpbiByZWxhdGlvbnNoaXBzIHNv
IHdlCisgICAgLy8gY2FuIHJlZmVyIHRvIHRoZSBPYnNlcnZlZERvbWFpbiB0YWJsZSBlbnRyaWVz
CisgICAgZm9yIChhdXRvJiBzdGF0aXN0aWMgOiBzdGF0aXN0aWNzTWFwKQorICAgICAgICBpbnNl
cnREb21haW5SZWxhdGlvbnNoaXBzKHN0YXRpc3RpYy52YWx1ZSk7CisKKyAgICBtX2RhdGFiYXNl
LnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6Y2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIC8vIEZJWE1FKDE5NTA4OCk6IEltcGxl
bWVudCBmb3IgRGF0YWJhc2UgdmVyc2lvbi4KK30KKworc3RhdGljIFN0cmluZyBkb21haW5zVG9T
dHJpbmcoY29uc3QgSGFzaFNldDxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byBkb21haW5OYW1lIDogZG9tYWlu
cykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgnIicpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChkb21haW5OYW1lLnN0cmluZygpKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJyInKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppbmNyZW1lbnRS
ZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYm
IGRvbWFpbnMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBTUUxp
dGVTdGF0ZW1lbnQgZG9tYWluc1RvVXBkYXRlU3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJp
bmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VUIGRhdGFSZWNvcmRzUmVtb3ZlZCA9IGRhdGFS
ZWNvcmRzUmVtb3ZlZCArIDEgV0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNU
b1N0cmluZyhkb21haW5zKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmluY3Jl
bWVudFN0YXRpc3RpY3NGb3JEb21haW5zIGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9
cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpyZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGly
ZWN0ZWRUb1RoaXNEb21haW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWdu
ZWQ+JiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVj
dXJzaXZlQ2FsbHMpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBp
ZiAobnVtYmVyT2ZSZWN1cnNpdmVDYWxscyA+PSBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5S
ZWRpcmVjdFRyYWNlQmFjaykgeworICAgICAgICBSRUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzLCAiSGl0ICV1IHJlY3Vyc2l2ZSBjYWxscyBpbiByZWRpcmVjdCBiYWNrdHJhY2UuIFJl
dHVybmluZyBlYXJseS4iLCBtYXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNl
QmFjayk7CisgICAgICAgIHJldHVybiBudW1iZXJPZlJlY3Vyc2l2ZUNhbGxzOworICAgIH0KKyAg
ICAKKyAgICArK251bWJlck9mUmVjdXJzaXZlQ2FsbHM7CisKKyAgICBTdGRTZXQ8dW5zaWduZWQ+
IG5ld2x5SWRlbnRpZmllZERvbWFpbnM7CisgICAgU1FMaXRlU3RhdGVtZW50IGZpbmRTdWJyZXNv
dXJjZXMobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIFN1YnJlc291cmNlVW5pcXVlUmVk
aXJlY3RzRnJvbS5mcm9tRG9tYWluSUQgZnJvbSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c0Zy
b20gSU5ORVIgSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5zLmRvbWFpbklE
ID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNGcm9tLmZyb21Eb21haW5JRCBXSEVSRSBzdWJy
ZXNvdXJjZURvbWFpbklEID0gIiwgU3RyaW5nOjpudW1iZXIocHJpbWFyeURvbWFpbklEKSwgIkFO
RCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAwIikpOworICAgIGlmIChmaW5kU3VicmVz
b3VyY2VzLnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKKyAgICAgICAgd2hpbGUgKGZpbmRTdWJy
ZXNvdXJjZXMuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIGF1dG8gbmV3RG9t
YWluSUQgPSBmaW5kU3VicmVzb3VyY2VzLmdldENvbHVtbkludCgwKTsKKyAgICAgICAgICAgIGF1
dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzLmluc2VydChu
ZXdEb21haW5JRCk7CisgICAgICAgICAgICBpZiAoaW5zZXJ0UmVzdWx0LnNlY29uZCkKKyAgICAg
ICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5zLmluc2VydChuZXdEb21haW5JRCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgZmluZFRvcEZyYW1lcyhtX2Rh
dGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNGcm9tLmZy
b21Eb21haW5JRCBmcm9tIFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSBJTk5FUiBKT0lOIE9i
c2VydmVkRG9tYWlucyBPTiBPYnNlcnZlZERvbWFpbnMuZG9tYWluSUQgPSBUb3BGcmFtZVVuaXF1
ZVJlZGlyZWN0c0Zyb20uZnJvbURvbWFpbklEIFdIRVJFIHRhcmdldERvbWFpbklEID0gIiwgU3Ry
aW5nOjpudW1iZXIocHJpbWFyeURvbWFpbklEKSwgIkFORCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2
YWxlbnQgPSAwIikpOworICAgIGlmIChmaW5kVG9wRnJhbWVzLnByZXBhcmUoKSA9PSBTUUxJVEVf
T0spIHsKKyAgICAgICAgd2hpbGUgKGZpbmRUb3BGcmFtZXMuc3RlcCgpID09IFNRTElURV9ST1cp
IHsKKyAgICAgICAgICAgIGF1dG8gbmV3RG9tYWluSUQgPSBmaW5kVG9wRnJhbWVzLmdldENvbHVt
bkludCgwKTsKKyAgICAgICAgICAgIGF1dG8gaW5zZXJ0UmVzdWx0ID0gbm9uUHJldmFsZW50UmVk
aXJlY3Rpb25Tb3VyY2VzLmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgICAgICBpZiAoaW5z
ZXJ0UmVzdWx0LnNlY29uZCkKKyAgICAgICAgICAgICAgICBuZXdseUlkZW50aWZpZWREb21haW5z
Lmluc2VydChuZXdEb21haW5JRCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmV3bHlJ
ZGVudGlmaWVkRG9tYWlucy5lbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNp
dmVDYWxsczsKKworICAgIGZvciAoYXV0byBkb21haW5JRCA6IG5ld2x5SWRlbnRpZmllZERvbWFp
bnMpCisgICAgICAgIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMgPSByZWN1cnNpdmVseUZpbmROb25Q
cmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21haW4oZG9tYWluSUQsIG5vblBy
ZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgbnVtYmVyT2ZSZWN1cnNpdmVDYWxscyk7CisKKyAg
ICByZXR1cm4gbnVtYmVyT2ZSZWN1cnNpdmVDYWxsczsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEl0ZXJhdG9yVHlwZT4KK3N0YXRpYyBTdHJpbmcgYnVpbGRMaXN0KGNvbnN0IFdURjo6SXRlcmF0
b3JSYW5nZTxJdGVyYXRvclR5cGU+JiB2YWx1ZXMpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWls
ZGVyOworICAgIGZvciAoYXV0byBkb21haW5JRCA6IHZhbHVlcykgeworICAgICAgICBpZiAoIWJ1
aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihkb21haW5JRCk7CisgICAgfQorICAgIHJl
dHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFN0ZFNldDx1bnNp
Z25lZD4gcHJldmFsZW50RHVlVG9SZWRpcmVjdDsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3VicmVz
b3VyY2VSZWRpcmVjdFN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIERJU1RJTkNUIFN1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG8uc3VicmVzb3VyY2VEb21haW5JRCBGUk9NIFN1YnJlc291
cmNlVW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21h
aW5zLmRvbWFpbklEID0gU3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFO
RCBPYnNlcnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAoc3VicmVzb3Vy
Y2VSZWRpcmVjdFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdo
aWxlIChzdWJyZXNvdXJjZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQor
ICAgICAgICAgICAgcHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQoc3VicmVzb3VyY2VSZWRp
cmVjdFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0ZVN0YXRl
bWVudCB0b3BGcmFtZVJlZGlyZWN0U3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgRElTVElO
Q1QgVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby5zb3VyY2VEb21haW5JRCBGUk9NIFRvcEZyYW1l
VW5pcXVlUmVkaXJlY3RzVG8gSk9JTiBPYnNlcnZlZERvbWFpbnMgT04gT2JzZXJ2ZWREb21haW5z
LmRvbWFpbklEID0gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUby50b0RvbWFpbklEIEFORCBPYnNl
cnZlZERvbWFpbnMuaXNQcmV2YWxlbnQgPSAxIl9zKTsKKyAgICBpZiAodG9wRnJhbWVSZWRpcmVj
dFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxlICh0b3BG
cmFtZVJlZGlyZWN0U3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAg
cHJldmFsZW50RHVlVG9SZWRpcmVjdC5pbnNlcnQodG9wRnJhbWVSZWRpcmVjdFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMCkpOworICAgIH0KKworICAgIFNRTGl0ZVN0YXRlbWVudCBtYXJrUHJldmFs
ZW50U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFp
bnMgU0VUIGlzUHJldmFsZW50ID0gMSBXSEVSRSBkb21haW5JRCBJTiAoIiwgYnVpbGRMaXN0KFdU
Rjo6SXRlcmF0b3JSYW5nZTxTdGRTZXQ8dW5zaWduZWQ+OjppdGVyYXRvcj4ocHJldmFsZW50RHVl
VG9SZWRpcmVjdC5iZWdpbigpLCBwcmV2YWxlbnREdWVUb1JlZGlyZWN0LmVuZCgpKSksICIpIikp
OworICAgIGlmIChtYXJrUHJldmFsZW50U3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
KyAgICAgICAgfHwgbWFya1ByZXZhbGVudFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRv
UHJldmFsZW50IGZhaWxlZCB0byBleGVjdXRlLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwg
dGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KK30KKworSGFzaE1hcDx1bnNpZ25lZCwgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Ok5vdFZlcnlQcmV2YWxlbnRSZXNvdXJjZXM+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBIYXNoTWFwPHVuc2ln
bmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzPiByZXN1bHRzOworICAgIFNRTGl0ZVN0YXRl
bWVudCBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxF
Q1QgZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBpc1ByZXZhbGVudCBGUk9NIE9ic2VydmVk
RG9tYWlucyBXSEVSRSBpc1ZlcnlQcmV2YWxlbnQgPSAwIl9zKTsKKyAgICBpZiAobm90VmVyeVBy
ZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAg
ICAgIHdoaWxlIChub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzU3RhdGVtZW50LnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBrZXkgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkp
OworICAgICAgICAgICAgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB2YWx1ZSh7IFJlZ2lzdHJh
YmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFibGVEb21haW5TdHJpbmcobm90
VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpKQorICAgICAg
ICAgICAgICAgICwgbm90VmVyeVByZXZhbGVudFJlc291cmNlc1N0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMikgPyBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZTo6TG93CisgICAgICAgICAgICAgICAgLCAwLCAwLCAwLCAwIH0pOworICAgICAgICAgICAg
cmVzdWx0cy5hZGQoa2V5LCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmdC
dWlsZGVyIGJ1aWxkZXI7CisgICAgZm9yIChhdXRvIHZhbHVlIDogcmVzdWx0cy5rZXlzKCkpIHsK
KyAgICAgICAgaWYgKCFidWlsZGVyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiLCAiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmROdW1iZXIodmFsdWUpOwor
ICAgIH0KKworICAgIGF1dG8gZG9tYWluSURzT2ZJbnRlcmVzdCA9IGJ1aWxkZXIudG9TdHJpbmco
KTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
U3RhdGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBzdWJyZXNvdXJjZURvbWFp
bklELCBDT1VOVCh0b3BGcmFtZURvbWFpbklEKSBGUk9NIFN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnMgV0hFUkUgc3VicmVzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRl
cmVzdCwgIikgR1JPVVAgQlkgc3VicmVzb3VyY2VEb21haW5JRCIpKTsKKyAgICBpZiAoc3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09L
KSB7CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zU3RhdGVt
ZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb21haW5J
RCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5z
U3RhdGVtZW50LmdldENvbHVtbkludCgwKSk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJl
c3VsdHMuZmluZChkb21haW5JRCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9IHJlc3VsdHMu
ZW5kKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zQ291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3VicmVzb3VyY2VVbmRl
clRvcEZyYW1lRG9tYWluc1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9D
b3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9Eb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0
c1RvIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09mSW50ZXJlc3Qs
ICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7
CisgICAgICAgIHdoaWxlIChzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1l
bnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklE
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3Vu
dFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBy
ZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRz
LmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YnJlc291cmNlVW5pcXVl
UmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnND
b3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc3VicmVzb3VyY2VE
b21haW5JRCwgQ09VTlQodG9wRnJhbWVEb21haW5JRCkgRlJPTSBTdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zIFdIRVJFIHN1YnJlc291cmNlRG9tYWluSUQgSU4gKCIsIGRvbWFpbklEc09m
SW50ZXJlc3QsICIpIEdST1VQIEJZIHN1YnJlc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FM
SVRFX09LKSB7CisgICAgICAgIHdoaWxlIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5zQ291
bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1lVW5kZXJUb3BGcmFtZURv
bWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpOworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUuc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN1YmZyYW1l
VW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudFN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgU1FMaXRlU3RhdGVtZW50IHRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudFN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1Qgc291cmNl
RG9tYWluSUQsIENPVU5UKHRvRG9tYWluSUQpIEZST00gVG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
byBXSEVSRSBzb3VyY2VEb21haW5JRCBJTiAoIiwgZG9tYWluSURzT2ZJbnRlcmVzdCwgIikgR1JP
VVAgQlkgc291cmNlRG9tYWluSUQiKSk7CisgICAgaWYgKHRvcEZyYW1lVW5pcXVlUmVkaXJlY3Rz
VG9Db3VudFN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CisgICAgICAgIHdoaWxl
ICh0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnRTdGF0ZW1lbnQuc3RlcCgpID09IFNRTElU
RV9ST1cpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGRvbWFpbklEID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5nZXRDb2x1bW5J
bnQoMCkpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSByZXN1bHRzLmZpbmQoZG9tYWluSUQp
OworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSByZXN1bHRzLmVuZCgpKQorICAgICAgICAgICAg
ICAgIHJlc3VsdC0+dmFsdWUudG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudFN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdHM7
Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlY2xhc3Np
ZnlSZXNvdXJjZXMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAg
YXV0byBub3RWZXJ5UHJldmFsZW50UmVzb3VyY2VzID0gZmluZE5vdFZlcnlQcmV2YWxlbnRSZXNv
dXJjZXMoKTsKKworICAgIGZvciAoYXV0byYgcmVzb3VyY2VTdGF0aXN0aWMgOiBub3RWZXJ5UHJl
dmFsZW50UmVzb3VyY2VzLnZhbHVlcygpKSB7CisgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9
IGNsYXNzaWZpZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3VyY2VTdGF0aXN0
aWMuc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCByZXNvdXJjZVN0YXRpc3Rp
Yy5zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHJlc291cmNlU3RhdGlzdGljLnN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgcmVzb3VyY2VTdGF0aXN0aWMudG9wRnJh
bWVVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCByZXNvdXJjZVN0YXRpc3RpYy5wcmV2YWxlbmNlKTsK
KyAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0gcmVzb3VyY2VTdGF0aXN0aWMucHJldmFsZW5j
ZSkKKyAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLnJl
Z2lzdGVyYWJsZURvbWFpbiwgbmV3UHJldmFsZW5jZSk7CisgICAgfQorfQorCit2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGFzc2lmeVByZXZhbGVudFJlc291cmNl
cygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgZW5zdXJlUHJldmFs
ZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgbWFya0FzUHJldmFsZW50SWZIYXNSZWRp
cmVjdGVkVG9QcmV2YWxlbnQoKTsKKyAgICByZWNsYXNzaWZ5UmVzb3VyY2VzKCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnN5bmNTdG9yYWdlSWZOZWVk
ZWQoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fZGF0YWJhc2Uu
cnVuVmFjdXVtQ29tbWFuZCgpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICBtX2RhdGFiYXNlLnJ1blZhY3V1bUNvbW1hbmQoKTsKK30KKwor
dm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzU3RvcmFnZUFjY2Vz
cyhjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9t
YWluJiB0b3BGcmFtZURvbWFpbiwgT3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBh
Z2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIHN3
aXRjaCAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAgIGNh
c2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOgorICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvb2tpZVRyZWF0
bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwOgorICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih0cnVl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxv
dzoKKyAgICAgICAgLy8gRG8gbm90aGluZworICAgICAgICBicmVhazsKKyAgICB9OworCisgICAg
UnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYoc3RvcmUoKSksIHN1YkZy
YW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWlu
ID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgc3RvcmUtPmNhbGxIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRC52YWx1ZSgpLCBwYWdlSUQsIFtzdG9yZSA9
IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oYm9vbCByZXN1bHQpIG11dGFibGUgeworICAgICAgICAgICAgc3RvcmUtPnN0YXRp
c3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCByZXN1bHRdICgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHJlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlcXVl
c3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFRvcEZyYW1l
RG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwg
Ym9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nlc3NT
dGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOworCisgICAgYXV0byBzdWJGcmFtZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlz
dGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZyYW1lRG9tYWluKTsKKworICAgIHN3aXRjaCAo
Y29va2llVHJlYXRtZW50Rm9yT3JpZ2luKHN1YkZyYW1lRG9tYWluKSkgeworICAgIGNhc2UgQ29v
a2llVHJlYXRtZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOiB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0lORk9fSUYoZGVidWdMb2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBpdHMg
Y29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFzIG5v
dCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1lRG9t
YWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihT
dG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVUcmVhdG1lbnRSZXN1bHQ6OkJsb2NrQW5kS2Vl
cDogeworICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0byBncmFudCBzdG9yYWdlIGFj
Y2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFyZSBub3QgYmxvY2tlZCBpbiB0
aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFz
QWNjZXNzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb29raWVUcmVh
dG1lbnRSZXN1bHQ6OkFsbG93OgorICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgICAgIGJyZWFr
OworICAgIH07CisKKyAgICBhdXRvIHVzZXJXYXNQcm9tcHRlZEVhcmxpZXIgPSBwcm9tcHRFbmFi
bGVkICYmIGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vzc1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVT
dGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgaWYgKHByb21wdEVuYWJsZWQgJiYg
IXVzZXJXYXNQcm9tcHRlZEVhcmxpZXIpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0
IHRvIGFzayB0aGUgdXNlciB3aGV0aGVyIHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2Vz
cyB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWlu
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdG9yYWdlQWNjZXNzU3RhdHVzOjpS
ZXF1aXJlc1VzZXJQcm9tcHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVz
ZXJXYXNQcm9tcHRlZEVhcmxpZXIpCisgICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYoZGVidWdM
b2dnaW5nRW5hYmxlZCgpLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJTdG9yYWdlIGFj
Y2VzcyB3YXMgZ3JhbnRlZCB0byAle3B1YmxpY31zIHVuZGVyICV7cHVibGljfXMuIiwgc3ViRnJh
bWVEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgdG9wRnJhbWVEb21haW4uc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgaW5jcmVtZW50U3RvcmFnZUFj
Y2VzcyhtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJVUERBVEUgT2JzZXJ2ZWREb21haW5zIFNFVCB0
aW1lc0FjY2Vzc2VkQXNGaXJzdFBhcnR5RHVlVG9TdG9yYWdlQWNjZXNzQVBJID0gdGltZXNBY2Nl
c3NlZEFzRmlyc3RQYXJ0eUR1ZVRvU3RvcmFnZUFjY2Vzc0FQSSArIDEgV0hFUkUgZG9tYWluSUQg
PSAiLCBTdHJpbmc6Om51bWJlcihzdWJGcmFtZVN0YXR1cy5zZWNvbmQpKSk7CisgICAgaWYgKGlu
Y3JlbWVudFN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBp
bmNyZW1lbnRTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3MgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAl
e3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBncmFudFN0b3JhZ2VBY2Nlc3NJ
bnRlcm5hbChXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RGTW92ZSh0b3BGcmFtZURvbWFpbiks
IGZyYW1lSUQsIHBhZ2VJRCwgdXNlcldhc1Byb21wdGVkRWFybGllciwgW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChib29sIHdhc0dyYW50ZWRBY2Nlc3Mp
IG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih3YXNHcmFudGVkQWNjZXNzID8g
U3RvcmFnZUFjY2Vzc1N0YXR1czo6SGFzQWNjZXNzIDogU3RvcmFnZUFjY2Vzc1N0YXR1czo6Q2Fu
bm90UmVxdWVzdEFjY2Vzcyk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCBPcGVu
ZXJQYWdlSUQgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJiBvcGVuZXJEb21haW4pCit7Cisg
ICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVuZXJEb21haW4pOwor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKGRvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2VzcyA9PSBvcGVuZXJEb21haW4pCisgICAgICAgIHJldHVybjsKKworICAgIGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbkluTmVlZE9m
U3RvcmFnZUFjY2Vzcyk7CisKKyAgICBpZiAoY29va2llVHJlYXRtZW50Rm9yT3JpZ2luKGRvbWFp
bkluTmVlZE9mU3RvcmFnZUFjY2VzcykgIT0gQ29va2llVHJlYXRtZW50UmVzdWx0OjpBbGxvdykK
KyAgICAgICAgcmV0dXJuOworCisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdF
bmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0
aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVu
ZGVyIG9wZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGlu
IHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgZ3JhbnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShkb21haW5Jbk5lZWRPZlN0b3Jh
Z2VBY2Nlc3MpLCBXVEZNb3ZlKG9wZW5lckRvbWFpbiksIFdURjo6bnVsbG9wdCwgb3BlbmVyUGFn
ZUlELCBmYWxzZSwgW10oYm9vbCkgeyB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3Vi
RnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAodXNlcldhc1Byb21wdGVkTm93KSB7Cisg
ICAgICAgIGF1dG8gc3ViRnJhbWVTdGF0dXMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CisgICAgICAgIEFTU0VSVChzdWJGcmFt
ZVN0YXR1cy5maXJzdCA9PSBBZGRlZFJlY29yZDo6Tm8pOworICAgICAgICBBU1NFUlQoaGFzSGFk
VXNlckludGVyYWN0aW9uKHN1YkZyYW1lRG9tYWluKSk7CisgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudCwg
c3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbik7CisgICAgfQorCisgICAgZ3Jh
bnRTdG9yYWdlQWNjZXNzSW50ZXJuYWwoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUo
dG9wRnJhbWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFp
biYmIHN1YkZyYW1lRG9tYWluLCBUb3BGcmFtZURvbWFpbiYmIHRvcEZyYW1lRG9tYWluLCBPcHRp
b25hbDxGcmFtZUlEPiBmcmFtZUlELCBQYWdlSUQgcGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRl
ZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjaykK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChzdWJGcmFtZURv
bWFpbiA9PSB0b3BGcmFtZURvbWFpbikgeworICAgICAgICBjYWxsYmFjayh0cnVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9zdG9yYWdlQWNjZXNz
UHJvbXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdlciBleHBlcmltZW50
YWwuCisgICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBzdG9yYWdlQWNjZXNz
UHJvbXB0c0VuYWJsZWQoKSkgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgYXV0byBzdWJGcmFt
ZVN0YXR1cyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1
YkZyYW1lRG9tYWluKTsKKyAgICAgICAgQVNTRVJUKHN1YkZyYW1lU3RhdHVzLmZpcnN0ID09IEFk
ZGVkUmVjb3JkOjpObyk7CisgICAgICAgIEFTU0VSVChoYXNIYWRVc2VySW50ZXJhY3Rpb24oc3Vi
RnJhbWVEb21haW4pKTsKKyAgICAgICAgQVNTRVJUKGhhc1VzZXJHcmFudGVkU3RvcmFnZUFjY2Vz
c1Rocm91Z2hQcm9tcHQoc3ViRnJhbWVTdGF0dXMuc2Vjb25kLCB0b3BGcmFtZURvbWFpbikpOwor
I2VuZGlmCisgICAgICAgIHNldFVzZXJJbnRlcmFjdGlvbihzdWJGcmFtZURvbWFpbiwgdHJ1ZSwg
V2FsbFRpbWU6Om5vdygpKTsKKyAgICB9CisKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2go
W3N1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1l
RG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGZyYW1lSUQsIHBhZ2VJRCwg
c3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgp
IG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbEdyYW50U3RvcmFnZUFjY2Vzc0hhbmRsZXIo
c3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFtjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKV0oYm9vbCB2YWx1
ZSkgbXV0YWJsZSB7CisgICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0
Y2goW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHZhbHVlXSAoKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fSk7CisgICAgfSk7CisKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6Z3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lzdHJhYmxl
RG9tYWluPiYgZG9tYWlucykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKwor
ICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVTdGF0ZW1lbnQobV9kYXRhYmFzZSwg
bWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgZ3JhbmRmYXRoZXJlZCA9IDEg
V0hFUkUgcmVnaXN0cmFibGVEb21haW4gSU4gKCIsIGRvbWFpbnNUb1N0cmluZyhkb21haW5zKSwg
IikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVudC5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFp
bnMgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30K
KworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCkKK3sKKyAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmICghZGVidWdNb2RlRW5hYmxlZCgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMik7CisKKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOworICAgIHNldFBy
ZXZhbGVudFJlc291cmNlKGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VM
b2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgcHJpbWFyeURvbWFpbnNUb0Jsb2NrLnVuY2hlY2tl
ZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkpOworCisgICAgaWYgKCFkZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnTWFudWFsUHJldmFsZW50
UmVzb3VyY2UoKSk7CisgICAgICAgIHNldFByZXZhbGVudFJlc291cmNlKGRlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2UoKSwgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7CisgICAgICAg
IHByaW1hcnlEb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZv
ciB0aGUgcHVycG9zZXMgb2YgSVRQIERlYnVnIE1vZGUuIiwgZGVidWdNYW51YWxQcmV2YWxlbnRS
ZXNvdXJjZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIHJldHVybiBw
cmltYXJ5RG9tYWluc1RvQmxvY2s7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYg
dGFyZ2V0RG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBzb3VyY2VEb21haW4sIGJvb2wgaXNSZWRpcmVjdCwgYm9v
bCBpc01haW5GcmFtZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAg
IGJvb2wgYXJlVGFyZ2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgPSB0YXJnZXREb21haW4g
PT0gdG9wRnJhbWVEb21haW47CisgICAgYm9vbCBhcmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2Ft
ZVNpdGUgPSB0YXJnZXREb21haW4gPT0gc291cmNlRG9tYWluOworCisgICAgYm9vbCBzdGF0aXN0
aWNzV2VyZVVwZGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzTWFpbkZyYW1lICYmICEoYXJlVGFy
Z2V0QW5kVG9wRnJhbWVEb21haW5zU2FtZVNpdGUgfHwgYXJlVGFyZ2V0QW5kU291cmNlRG9tYWlu
c1NhbWVTaXRlKSkgeworICAgICAgICBhdXRvIHRhcmdldFJlc3VsdCA9IGVuc3VyZVJlc291cmNl
U3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisgICAgICAgIHVw
ZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgUmVzb3VyY2VMb2FkU3RhdGlzdGljczo6cmVkdWNl
VGltZVJlc29sdXRpb24oV2FsbFRpbWU6Om5vdygpKSk7CisKKyAgICAgICAgaWYgKCFyZWxhdGlv
bnNoaXBFeGlzdHMobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIHRhcmdldFJl
c3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKSkgeworICAgICAgICAgICAgaW5zZXJ0RG9tYWlu
UmVsYXRpb25zaGlwKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgdGFyZ2V0UmVzdWx0
LnNlY29uZCwgdG9wRnJhbWVEb21haW4pOworICAgICAgICAgICAgc3RhdGlzdGljc1dlcmVVcGRh
dGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpc1JlZGlyZWN0ICYmICFh
cmVUYXJnZXRBbmRTb3VyY2VEb21haW5zU2FtZVNpdGUpIHsKKyAgICAgICAgaWYgKGlzTWFpbkZy
YW1lKSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9tYWluKTsKKyAg
ICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNUb0V4aXN0cywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4p
KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVV
bmlxdWVSZWRpcmVjdHNUbywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXRE
b21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0gZW5zdXJlUmVz
b3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWluKTsKKyAgICAg
ICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNG
cm9tRXhpc3RzLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pKSB7CisgICAgICAg
ICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVj
dHNGcm9tLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4pOworICAgICAgICAgICAg
ICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBhdXRvIHJlZGlyZWN0aW5nRG9tYWluUmVzdWx0ID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc291cmNlRG9tYWluKTsK
KyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlxdWVS
ZWRpcmVjdHNUb0V4aXN0cywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25kLCB0YXJnZXRE
b21haW4pKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUbywgcmVkaXJlY3RpbmdEb21haW5SZXN1bHQuc2Vjb25k
LCB0YXJnZXREb21haW4pOworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9
IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gdGFyZ2V0UmVzdWx0ID0g
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4odGFyZ2V0RG9tYWlu
KTsKKyAgICAgICAgICAgIGlmICghcmVsYXRpb25zaGlwRXhpc3RzKG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tRXhpc3RzLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4p
KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNGcm9tLCB0YXJnZXRSZXN1bHQuc2Vjb25kLCBzb3VyY2VEb21haW4p
OworICAgICAgICAgICAgICAgIHN0YXRpc3RpY3NXZXJlVXBkYXRlZCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3RhdGlzdGljc1dlcmVVcGRhdGVk
KQorICAgICAgICBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmxvZ1N1
YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBl
bnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0YXJnZXREb21haW4p
OworICAgIHVwZGF0ZUxhc3RTZWVuKHRhcmdldERvbWFpbiwgbGFzdFNlZW4pOworCisgICAgYXV0
byB0YXJnZXREb21haW5JRCA9IHJlc3VsdC5zZWNvbmQ7CisgICAgaWYgKCFyZWxhdGlvbnNoaXBF
eGlzdHMobV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMsIHRhcmdldERvbWFp
bklELCB0b3BGcmFtZURvbWFpbikpIHsKKyAgICAgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlw
KG1fc3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9tYWlucywgdGFyZ2V0RG9tYWluSUQsIHRvcEZy
YW1lRG9tYWluKTsKKyAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJ
Zk5lY2Vzc2FyeSgpOworICAgIH0KK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURv
bWFpbiYgc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHRhcmdldERvbWFp
bikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gc291cmNl
RG9tYWluUmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21h
aW4oc291cmNlRG9tYWluKTsKKyAgICBhdXRvIHRhcmdldERvbWFpblJlc3VsdCA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRhcmdldERvbWFpbik7CisKKyAg
ICBib29sIGlzTmV3UmVkaXJlY3RUb0VudHJ5ID0gZmFsc2U7CisgICAgaWYgKCFyZWxhdGlvbnNo
aXBFeGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLCBzb3VyY2VEb21h
aW5SZXN1bHQuc2Vjb25kLCB0YXJnZXREb21haW4pKSB7CisgICAgICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHNvdXJjZURvbWFpblJl
c3VsdC5zZWNvbmQsIHRhcmdldERvbWFpbik7CisgICAgICAgIGlzTmV3UmVkaXJlY3RUb0VudHJ5
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGlzTmV3UmVkaXJlY3RGcm9tRW50cnkgPSBmYWxz
ZTsKKyAgICBpZiAoIXJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbUV4aXN0cywgdGFyZ2V0RG9tYWluUmVzdWx0LnNlY29uZCwgc291cmNlRG9tYWluKSkg
eworICAgICAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAobV9zdWJyZXNvdXJjZVVuaXF1ZVJl
ZGlyZWN0c0Zyb20sIHRhcmdldERvbWFpblJlc3VsdC5zZWNvbmQsIHNvdXJjZURvbWFpbik7Cisg
ICAgICAgIGlzTmV3UmVkaXJlY3RGcm9tRW50cnkgPSB0cnVlOworICAgIH0KKworICAgIGlmIChp
c05ld1JlZGlyZWN0VG9FbnRyeSB8fCBpc05ld1JlZGlyZWN0RnJvbUVudHJ5KQorICAgICAgICBz
Y2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFVzZXJJbnRlcmFjdGlv
bihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluLCBib29sIGhhZFVzZXJJbnRlcmFjdGlv
biwgV2FsbFRpbWUgbW9zdFJlY2VudEludGVyYWN0aW9uKQoreworICAgIEFTU0VSVCghUnVuTG9v
cDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRl
bWVudC5iaW5kSW50KDEsIGhhZFVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgfHwgbV9tb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uU3RhdGVtZW50LmJpbmREb3VibGUoMiwgbW9zdFJlY2VudEludGVy
YWN0aW9uLnNlY29uZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkgIT0gU1FMSVRFX09LCisgICAgICAg
IHx8IG1fbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblN0YXRlbWVudC5iaW5kVGV4dCgzLCBkb21h
aW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8fCBtX21vc3RSZWNlbnRVc2VySW50
ZXJhY3Rpb25TdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRVc2VySW50ZXJhY3Rpb24sIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0
aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBt
X21vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24o
Y29uc3QgVG9wRnJhbWVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgc2V0VXNlckludGVyYWN0aW9uKGRvbWFpbiwgdHJ1ZSwgV2FsbFRp
bWU6Om5vdygpKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikK
K3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdGFyZ2V0UmVz
dWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oZG9tYWlu
KTsKKyAgICBzZXRVc2VySW50ZXJhY3Rpb24oZG9tYWluLCBmYWxzZSwgeyB9KTsKKworICAgIFNR
TGl0ZVN0YXRlbWVudCByZW1vdmVTdG9yYWdlQWNjZXNzKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmco
IkRFTEVURSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWlucyBXSEVSRSBkb21h
aW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHRhcmdldFJlc3VsdC5zZWNvbmQpKSk7CisgICAgaWYg
KHJlbW92ZVN0b3JhZ2VBY2Nlc3MucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBy
ZW1vdmVTdG9yYWdlQWNjZXNzLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxF
QVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6bG9nVXNlckludGVyYWN0aW9uIGZhaWxlZCB0byBiaW5kLCBlcnJvciBtZXNzYWdl
OiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyAgICBpZiAobV9oYWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWlu
LnN0cmluZygpKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV9oYWRVc2VySW50ZXJhY3Rpb25T
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTog
JXtwdWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGJvb2wgaGFkVXNlckludGVyYWN0aW9uID0gISFtX2hhZFVzZXJJbnRlcmFjdGlvblN0YXRlbWVu
dC5nZXRDb2x1bW5JbnQoMCk7CisgICAgaWYgKCFoYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBXYWxsVGltZSBtb3N0UmVjZW50VXNlckludGVyYWN0
aW9uVGltZSA9IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhtX2hhZFVzZXJJbnRlcmFjdGlvblN0
YXRlbWVudC5nZXRDb2x1bW5Eb3VibGUoMSkpOworCisgICAgaWYgKGhhc1N0YXRpc3RpY3NFeHBp
cmVkKG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSkgeworICAgICAgICAvLyBEcm9wIHBy
aXZhY3kgc2Vuc2l0aXZlIGRhdGEgYmVjYXVzZSB3ZSBubyBsb25nZXIgbmVlZCBpdC4KKyAgICAg
ICAgLy8gU2V0IHRpbWVzdGFtcCB0byAwIHNvIHRoYXQgc3RhdGlzdGljcyBtZXJnZSB3aWxsIGtu
b3cKKyAgICAgICAgLy8gaXQgaGFzIGJlZW4gcmVzZXQgYXMgb3Bwb3NlZCB0byBpdHMgZGVmYXVs
dCAtMS4KKyAgICAgICAgY2xlYXJVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgaGFk
VXNlckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiBoYWRVc2Vy
SW50ZXJhY3Rpb247Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4s
IFJlc291cmNlTG9hZFByZXZhbGVuY2UgbmV3UHJldmFsZW5jZSkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChtX3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3Rh
dGVtZW50LmJpbmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluLnN0cmluZygpKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29y
aywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om1fdXBkYXRlUHJl
dmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1YmxpY31z
IiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGludCByZXNldFJl
c3VsdCA9IG1fdXBkYXRlUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBB
U1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworCisg
ICAgaWYgKG5ld1ByZXZhbGVuY2UgPT0gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhpZ2gp
IHsKKyAgICAgICAgaWYgKG1fdXBkYXRlVmVyeVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50LmJp
bmRJbnQoMSwgMSkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICB8fCBtX3VwZGF0ZVZlcnlQcmV2
YWxlbnRSZXNvdXJjZVN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4uc3RyaW5nKCkpICE9IFNR
TElURV9PSworICAgICAgICAgICAgfHwgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0
ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
bV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQgZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCByZXNldFJlc3VsdCA9IG1fdXBkYXRlVmVyeVByZXZhbGVudFJl
c291cmNlU3RhdGVtZW50LnJlc2V0KCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1
bHQsIHJlc2V0UmVzdWx0ID09IFNRTElURV9PSyk7CisgICAgfQorCisgICAgU3RkU2V0PHVuc2ln
bmVkPiBub25QcmV2YWxlbnRSZWRpcmVjdGlvblNvdXJjZXM7CisgICAgcmVjdXJzaXZlbHlGaW5k
Tm9uUHJldmFsZW50RG9tYWluc1RoYXRSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGRvbWFpbklEKGRv
bWFpbiksIG5vblByZXZhbGVudFJlZGlyZWN0aW9uU291cmNlcywgMCk7CisgICAgc2V0RG9tYWlu
c0FzUHJldmFsZW50KFdURk1vdmUobm9uUHJldmFsZW50UmVkaXJlY3Rpb25Tb3VyY2VzKSk7Cit9
CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERvbWFpbnNB
c1ByZXZhbGVudChTdGRTZXQ8dW5zaWduZWQ+JiYgZG9tYWlucykKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBkb21haW5zVG9VcGRhdGVT
dGF0ZW1lbnQobV9kYXRhYmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBT
RVQgaXNQcmV2YWxlbnQgPSAxIFdIRVJFIGRvbWFpbklEIElOICgiLCBidWlsZExpc3QoV1RGOjpJ
dGVyYXRvclJhbmdlPFN0ZFNldDx1bnNpZ25lZD46Oml0ZXJhdG9yPihkb21haW5zLmJlZ2luKCks
IGRvbWFpbnMuZW5kKCkpKSwgIikiKSk7CisgICAgaWYgKGRvbWFpbnNUb1VwZGF0ZVN0YXRlbWVu
dC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IGRvbWFpbnNUb1VwZGF0ZVN0YXRl
bWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldERv
bWFpbnNBc1ByZXZhbGVudCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlz
LCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK1N0cmluZyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdAor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgLy8gRklYTUUoMTk1MDg4
KTogSW1wbGVtZW50IFNRTGl0ZS1iYXNlZCBkdW1waW5nIHJvdXRpbmVzLgorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmU6OnByZWRpY2F0ZVZhbHVlRm9yRG9tYWluKFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCYgcHJlZGljYXRlU3RhdGVtZW50LCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IAorICAgIGlmIChwcmVkaWNhdGVTdGF0ZW1lbnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygp
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgfHwgcHJlZGljYXRlU3RhdGVtZW50LnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6cHJlZGljYXRlVmFsdWVGb3JEb21h
aW4gZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2Rh
dGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHJlc3VsdCA9ICEhcHJlZGlj
YXRlU3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICBpbnQgcmVzZXRSZXN1bHQgPSBwcmVk
aWNhdGVTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCBy
ZXNldFJlc3VsdCA9PSBTUUxJVEVfT0spOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzUHJldmFsZW50UmVzb3VyY2Uo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiBwcmVkaWNhdGVWYWx1ZUZvckRvbWFpbiht
X2lzUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmlzVmVyeVByZXZhbGVudFJlc291cmNlKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7CisgICAgQVNTRVJUKCFSdW5M
b29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRlVmFsdWVGb3JEb21haW4obV9p
c1ZlcnlQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudCwgZG9tYWluKTsKK30KKworYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJyZXNvdXJj
ZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgcmV0dXJuIHJlbGF0aW9uc2hpcEV4aXN0cyhtX3N1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0cywgZG9tYWluSUQoc3VicmVzb3VyY2VEb21h
aW4pLCB0b3BGcmFtZURvbWFpbik7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25zdCBTdWJGcmFtZURv
bWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFp
bikgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVy
biByZWxhdGlvbnNoaXBFeGlzdHMobV9zdWJmcmFtZVVuZGVyVG9wRnJhbWVEb21haW5FeGlzdHMs
IGRvbWFpbklEKHN1YkZyYW1lRG9tYWluKSwgdG9wRnJhbWVEb21haW4pOworfQorCitib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjppc1JlZ2lzdGVyZWRBc1JlZGlyZWN0
aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9tYWluLCBj
b25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIHJldHVybiByZWxhdGlvbnNoaXBF
eGlzdHMobV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzLCBkb21haW5JRChyZWRp
cmVjdGVkRnJvbURvbWFpbiksIHJlZGlyZWN0ZWRUb0RvbWFpbik7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9t
YWluKGRvbWFpbik7CisgICAgCisgICAgaWYgKG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRl
bWVudC5iaW5kVGV4dCgxLCBkb21haW4uc3RyaW5nKCkpICE9IFNRTElURV9PSworICAgICAgICB8
fCBtX2NsZWFyUHJldmFsZW50UmVzb3VyY2VTdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpjbGVhclByZXZhbGVudFJlc291cmNlLCBlcnJvciBt
ZXNzYWdlOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGludCByZXNldFJlc3VsdCA9IG1fY2xlYXJQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVu
dC5yZXNldCgpOworICAgIEFTU0VSVF9VTlVTRUQocmVzZXRSZXN1bHQsIHJlc2V0UmVzdWx0ID09
IFNRTElURV9PSyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmU6OnNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgYm9v
bCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgCisg
ICAgaWYgKG1fdXBkYXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5iaW5kSW50KDEsIHZhbHVlKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgfHwgbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LmJp
bmRUZXh0KDEsIGRvbWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBk
YXRlR3JhbmRmYXRoZXJlZFN0YXRlbWVudC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OnNldEdyYW5kZmF0aGVyZWQgZmFpbGVkIHRvIGJpbmQsIGVycm9yIG1l
c3NhZ2U6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaW50IHJlc2V0UmVzdWx0ID0gbV91cGRhdGVHcmFuZGZhdGhlcmVkU3RhdGVtZW50LnJl
c2V0KCk7CisgICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FM
SVRFX09LKTsKK30KKworYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6
aXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICByZXR1cm4gcHJlZGljYXRl
VmFsdWVGb3JEb21haW4obV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQsIGRvbWFpbik7Cit9CisK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFN1YmZyYW1lVW5k
ZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNv
bnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0
aWNzRm9yUmVnaXN0cmFibGVEb21haW4oc3ViRnJhbWVEb21haW4pOworCisgICAgLy8gRm9yIGNv
bnNpc3RlbmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3Ig
dGhlIHRvcCBmcmFtZSBkb21haW4uCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRp
b25zaGlwKG1fc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlucywgcmVzdWx0LnNlY29uZCwgdG9w
RnJhbWVEb21haW4pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0
b3JlOjpzZXRTdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VE
b21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVE
b21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRvIHJl
c3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YnJl
c291cmNlRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdlIGFs
c28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSB0b3AgZnJhbWUgZG9tYWluLgorICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9t
YWluKTsKKworICAgIGluc2VydERvbWFpblJlbGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnMsIHJlc3VsdC5zZWNvbmQsIHRvcEZyYW1lRG9tYWluKTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdFRvKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwg
Y29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihzdWJyZXNvdXJjZURvbWFpbik7CisKKyAgICAvLyBG
b3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVudHJ5
IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0Zv
clJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFpblJl
bGF0aW9uc2hpcChtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG8sIHJlc3VsdC5zZWNvbmQs
IHJlZGlyZWN0RG9tYWluKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJl
Y3REb21haW4pCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBhdXRv
IHJlc3VsdCA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1
YnJlc291cmNlRG9tYWluKTsKKworICAgIC8vIEZvciBjb25zaXN0ZW5jeSwgbWFrZSBzdXJlIHdl
IGFsc28gaGF2ZSBhIHN0YXRpc3RpY3MgZW50cnkgZm9yIHRoZSByZWRpcmVjdCBkb21haW4uCisg
ICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3RE
b21haW4pOworCisgICAgaW5zZXJ0RG9tYWluUmVsYXRpb25zaGlwKG1fc3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdHNGcm9tLCByZXN1bHQuc2Vjb25kLCByZWRpcmVjdERvbWFpbik7Cit9CisKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRvcEZyYW1lVW5pcXVl
UmVkaXJlY3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJl
ZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6Omlz
TWFpbigpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9y
UmVnaXN0cmFibGVEb21haW4odG9wRnJhbWVEb21haW4pOworCisgICAgLy8gRm9yIGNvbnNpc3Rl
bmN5LCBtYWtlIHN1cmUgd2UgYWxzbyBoYXZlIGEgc3RhdGlzdGljcyBlbnRyeSBmb3IgdGhlIHJl
ZGlyZWN0IGRvbWFpbi4KKyAgICBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJs
ZURvbWFpbihyZWRpcmVjdERvbWFpbik7CisKKyAgICBpbnNlcnREb21haW5SZWxhdGlvbnNoaXAo
bV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLCByZXN1bHQuc2Vjb25kLCByZWRpcmVjdERvbWFp
bik7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnNldFRv
cEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURv
bWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWluKQoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byByZXN1bHQgPSBlbnN1cmVSZXNvdXJj
ZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbih0b3BGcmFtZURvbWFpbik7CisKKyAgICAv
LyBGb3IgY29uc2lzdGVuY3ksIG1ha2Ugc3VyZSB3ZSBhbHNvIGhhdmUgYSBzdGF0aXN0aWNzIGVu
dHJ5IGZvciB0aGUgcmVkaXJlY3QgZG9tYWluLgorICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKKworICAgIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChtX3RvcEZyYW1lVW5pcXVlUmVkaXJlY3RzRnJvbSwgcmVzdWx0LnNlY29u
ZCwgcmVkaXJlY3REb21haW4pOworfQorCitzdGQ6OnBhaXI8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU6OkFkZGVkUmVjb3JkLCB1bnNpZ25lZD4gUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6OmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxl
RG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1l
bnQuYmluZFRleHQoMSwgZG9tYWluLnN0cmluZygpKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAg
UkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNyZWF0ZVNjaGVtYSBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB7IEFkZGVkUmVjb3JkOjpObywgMCB9OworICAg
IH0KKyAgICAKKyAgICBpZiAobV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQuc3RlcCgpID09
IFNRTElURV9ST1cpIHsKKyAgICAgICAgdW5zaWduZWQgZG9tYWluSUQgPSBtX2RvbWFpbklERnJv
bVN0cmluZ1N0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisKKyAgICAgICAgaW50IHJlc2V0UmVz
dWx0ID0gbV9kb21haW5JREZyb21TdHJpbmdTdGF0ZW1lbnQucmVzZXQoKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKyAgICAg
ICAgcmV0dXJuIHsgQWRkZWRSZWNvcmQ6Ok5vLCBkb21haW5JRCB9OworICAgIH0KKworICAgIGlu
dCByZXNldFJlc3VsdCA9IG1fZG9tYWluSURGcm9tU3RyaW5nU3RhdGVtZW50LnJlc2V0KCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsK
KworICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3MgbmV3T2JzZXJ2YXRpb24oZG9tYWluKTsKKyAg
ICBpbnNlcnRPYnNlcnZlZERvbWFpbihuZXdPYnNlcnZhdGlvbik7CisKKyAgICByZXR1cm4geyBB
ZGRlZFJlY29yZDo6WWVzLCBkb21haW5JRChkb21haW4pIH07Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigp
KTsKKworICAgIGNsZWFyT3BlcmF0aW5nRGF0ZXMoKTsKKworICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworCisgICAgcmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhbY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0geyB9KTsKKworICAgIGF1dG8gcHJpbWFy
eURvbWFpbnNUb0Jsb2NrID0gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7
CisgICAgdXBkYXRlQ29va2llQmxvY2tpbmdGb3JEb21haW5zKHByaW1hcnlEb21haW5zVG9CbG9j
aywgW2NhbGxiYWNrQWdncmVnYXRvciA9IGNhbGxiYWNrQWdncmVnYXRvci5jb3B5UmVmKCldIHsg
fSk7Cit9CisKK1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpDb29raWVUcmVh
dG1lbnRSZXN1bHQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNvb2tpZVRy
ZWF0bWVudEZvck9yaWdpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKSBjb25zdAor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgU1FMaXRlU3RhdGVtZW50
IHN0YXRlbWVudChtX2RhdGFiYXNlLCBtYWtlU3RyaW5nKCJTRUxFQ1QgaXNQcmV2YWxlbnQsIGhh
ZFVzZXJJbnRlcmFjdGlvbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSByZWdpc3RyYWJsZURv
bWFpbiA9ICIsIGRvbWFpbi5zdHJpbmcoKSkpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
IHsKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QWxsb3c7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNQcmV2YWxlbnQgPSAhIXN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7
CisgICAgaWYgKCFpc1ByZXZhbGVudCkKKyAgICAgICAgcmV0dXJuIENvb2tpZVRyZWF0bWVudFJl
c3VsdDo6QWxsb3c7CisKKyAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IHN0YXRlbWVudC5n
ZXRDb2x1bW5JbnQoMSkgPyB0cnVlIDogZmFsc2U7CisgICAgcmV0dXJuIGhhZFVzZXJJbnRlcmFj
dGlvbiA/IENvb2tpZVRyZWF0bWVudFJlc3VsdDo6QmxvY2tBbmRLZWVwIDogQ29va2llVHJlYXRt
ZW50UmVzdWx0OjpCbG9ja0FuZFB1cmdlOworfQorICAgIAorYm9vbCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFBy
b21wdCh1bnNpZ25lZCByZXF1ZXN0aW5nRG9tYWluSUQsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiBmaXJzdFBhcnR5RG9tYWluKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgYXV0byBmaXJzdFBhcnR5UHJpbWFyeURvbWFpbklEID0gZG9tYWluSUQoZmly
c3RQYXJ0eURvbWFpbik7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJh
c2UsIG1ha2VTdHJpbmcoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFN0b3JhZ2VBY2Nlc3NVbmRlclRv
cEZyYW1lRG9tYWlucyBXSEVSRSBkb21haW5JRCA9ICIsIFN0cmluZzo6bnVtYmVyKHJlcXVlc3Rp
bmdEb21haW5JRCksICIgQU5EIHRvcExldmVsRG9tYWluSUQgPSAiLCBTdHJpbmc6Om51bWJlcihm
aXJzdFBhcnR5UHJpbWFyeURvbWFpbklEKSkpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgp
ICE9IFNRTElURV9PSworICAgICAgICB8fCBzdGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ST1cp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhc3RhdGVtZW50LmdldENvbHVt
bkludCgwKTsKK30KKworVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6ZG9tYWluc1RvQmxvY2soKSBjb25zdAoreworICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBy
ZXN1bHRzOworICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVD
VCByZWdpc3RyYWJsZURvbWFpbiBGUk9NIE9ic2VydmVkRG9tYWlucyBXSEVSRSBpc1ByZXZhbGVu
dCA9IDEiX3MpOworICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdHM7CisgICAgCisgICAgd2hpbGUgKHN0YXRlbWVudC5zdGVwKCkg
PT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoUmVnaXN0cmFibGVEb21haW46
OnVuY2hlY2tlZENyZWF0ZUZyb21SZWdpc3RyYWJsZURvbWFpblN0cmluZyhzdGF0ZW1lbnQuZ2V0
Q29sdW1uVGV4dCgwKSkpOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gZG9tYWluc1RvQmxvY2sgPSB0aGlzLT5k
b21haW5zVG9CbG9jaygpOworCisgICAgaWYgKGRvbWFpbnNUb0Jsb2NrLmlzRW1wdHkoKSkgewor
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSAmJiAhZG9tYWluc1RvQmxvY2suaXNFbXB0eSgp
KQorICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoImJsb2NrIiwgZG9tYWluc1RvQmxv
Y2spOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBkb21haW5zVG9CbG9jayA9IGNy
b3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBzdG9yZS0+Y2FsbFVw
ZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9tYWluc1RvQmxv
Y2ssIFt3ZWFrVGhpcyA9IFdURk1vdmUod2Vha1RoaXMpLCBzdG9yZSA9IHN0b3JlLmNvcHlSZWYo
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbd2Vh
a1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcigpOworICAgICAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtU
aGlzLT5kZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IkRvbmUgdXBkYXRpbmcgY29va2llIGJsb2NraW5nLiIpOworICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCitWZWN0b3I8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmU6OlByZXZhbGVudERvbWFpbkRhdGE+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlOjpwcmV2YWxlbnREb21haW5zKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKKyAgICAKKyAgICBWZWN0b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcmVz
dWx0czsKKyAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1Qg
ZG9tYWluSUQsIHJlZ2lzdHJhYmxlRG9tYWluLCBtb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGlt
ZSwgaGFkVXNlckludGVyYWN0aW9uLCBncmFuZGZhdGhlcmVkIEZST00gT2JzZXJ2ZWREb21haW5z
IFdIRVJFIGlzUHJldmFsZW50ID0gMSJfcyk7CisgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LKQorICAgICAgICByZXR1cm4gcmVzdWx0czsKKyAgICAKKyAgICB3aGlsZSAo
c3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCkpCisgICAg
ICAgICAgICAsIFJlZ2lzdHJhYmxlRG9tYWluOjp1bmNoZWNrZWRDcmVhdGVGcm9tUmVnaXN0cmFi
bGVEb21haW5TdHJpbmcoc3RhdGVtZW50LmdldENvbHVtblRleHQoMSkpCisgICAgICAgICAgICAs
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhzdGF0ZW1lbnQuZ2V0Q29sdW1uRG91YmxlKDIpKQor
ICAgICAgICAgICAgLCBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDMpID8gdHJ1ZSA6IGZhbHNlCisg
ICAgICAgICAgICAsIHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoNCkgPyB0cnVlIDogZmFsc2UKKyAg
ICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHRzOworfQorCitWZWN0b3I8
dW5zaWduZWQ+IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpmaW5kRXhwaXJl
ZFVzZXJJbnRlcmFjdGlvbnMoKSBjb25zdAoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgVmVjdG9yPHVuc2lnbmVkPiByZXN1bHRzOworICAgIE9wdGlvbmFsPFNlY29u
ZHM+IGV4cGlyYXRpb25EYXRlVGltZSA9IHN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCk7CisgICAg
aWYgKCFleHBpcmF0aW9uRGF0ZVRpbWUpCisgICAgICAgIHJldHVybiByZXN1bHRzOworCisgICAg
aWYgKG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuYmluZERvdWJsZSgxLCBl
eHBpcmF0aW9uRGF0ZVRpbWUudmFsdWUoKS52YWx1ZSgpKSAhPSBTUUxJVEVfT0spCisgICAgICAg
IHJldHVybiByZXN1bHRzOworCisgICAgd2hpbGUgKG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rp
b25TdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1cpCisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0ZW1lbnQuZ2V0Q29sdW1uSW50KDApKTsK
KworICAgIGludCByZXNldFJlc3VsdCA9IG1fZmluZEV4cGlyZWRVc2VySW50ZXJhY3Rpb25TdGF0
ZW1lbnQucmVzZXQoKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc2V0UmVzdWx0LCByZXNldFJlc3Vs
dCA9PSBTUUxJVEVfT0spOworCisgICAgcmV0dXJuIHJlc3VsdHM7Cit9CisKK3ZvaWQgUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OmNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlv
bnMoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgYXV0byBleHBp
cmVkUmVjb3JkcyA9IGZpbmRFeHBpcmVkVXNlckludGVyYWN0aW9ucygpOworICAgIGlmIChleHBp
cmVkUmVjb3Jkcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZXhwaXJl
ZFJlY29yZElEcyA9IGJ1aWxkTGlzdChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVk
Pjo6aXRlcmF0b3I+KGV4cGlyZWRSZWNvcmRzLmJlZ2luKCksIGV4cGlyZWRSZWNvcmRzLmVuZCgp
KSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgY2xlYXJFeHBpcmVkSW50ZXJhY3Rpb24obV9kYXRh
YmFzZSwgbWFrZVN0cmluZygiVVBEQVRFIE9ic2VydmVkRG9tYWlucyBTRVQgbW9zdFJlY2VudFVz
ZXJJbnRlcmFjdGlvblRpbWUgPSAwLCBoYWRVc2VySW50ZXJhY3Rpb24gPSAxIFdIRVJFIGRvbWFp
bklEIElOICgiLCBleHBpcmVkUmVjb3JkSURzLCAiKSIpKTsKKyAgICBpZiAoY2xlYXJFeHBpcmVk
SW50ZXJhY3Rpb24ucHJlcGFyZSgpICE9IFNRTElURV9PSykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgU1FMaXRlU3RhdGVtZW50IHJlbW92ZVN0b3JhZ2VBY2Nlc3MobV9kYXRhYmFzZSwgbWFrZVN0
cmluZygiREVMRVRFIEZST00gU3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zICIsIGV4
cGlyZWRSZWNvcmRJRHMsICIpIikpOworICAgIGlmIChyZW1vdmVTdG9yYWdlQWNjZXNzLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0spCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChjbGVhckV4cGly
ZWRJbnRlcmFjdGlvbi5zdGVwKCkgIT0gU1FMSVRFX0RPTkUKKyAgICAgICAgfHwgcmVtb3ZlU3Rv
cmFnZUFjY2Vzcy5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTmV0d29yaywgIiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
OmxvZ1VzZXJJbnRlcmFjdGlvbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJs
aWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmU6OmNsZWFyR3JhbmRmYXRoZXJpbmcoVmVjdG9yPHVuc2lnbmVkPiYmIGRvbWFp
bklEc1RvQ2xlYXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBp
ZiAoZG9tYWluSURzVG9DbGVhci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gbGlzdFRvQ2xlYXIgPSBidWlsZExpc3QoV1RGOjpJdGVyYXRvclJhbmdlPFZlY3Rvcjx1bnNp
Z25lZD46Oml0ZXJhdG9yPihkb21haW5JRHNUb0NsZWFyLmJlZ2luKCksIGRvbWFpbklEc1RvQ2xl
YXIuZW5kKCkpKTsKKworICAgIFNRTGl0ZVN0YXRlbWVudCBjbGVhckdyYW5kZmF0aGVyaW5nU3Rh
dGVtZW50KG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIlVQREFURSBPYnNlcnZlZERvbWFpbnMgU0VU
IGdyYW5kZmF0aGVyZWQgPSAwIFdIRVJFIGRvbWFpbklEIElOICgiLCBsaXN0VG9DbGVhciwgIiki
KSk7CisgICAgaWYgKGNsZWFyR3JhbmRmYXRoZXJpbmdTdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChjbGVhckdyYW5kZmF0aGVy
aW5nU3RhdGVtZW50LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICBSRUxFQVNFX0xP
R19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9y
ZTo6Y2xlYXJHcmFuZGZhdGhlcmluZyBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtw
dWJsaWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4g
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnJlZ2lzdHJhYmxlRG9tYWluc1Rv
UmVtb3ZlV2Vic2l0ZURhdGFGb3IoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OworCisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcCgpID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wgc2hvdWxkQ2xl
YXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nICYmIGVuZE9m
R3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKTsKKworICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0
aGVyaW5nKQorICAgICAgICBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAoKTsKKwor
ICAgIGNsZWFyRXhwaXJlZFVzZXJJbnRlcmFjdGlvbnMoKTsKKyAgICAKKyAgICBWZWN0b3I8UmVn
aXN0cmFibGVEb21haW4+IHByZXZhbGVudFJlc291cmNlczsKKworICAgIFZlY3RvcjxQcmV2YWxl
bnREb21haW5EYXRhPiBwcmV2YWxlbnREb21haW5zID0gdGhpcy0+cHJldmFsZW50RG9tYWlucygp
OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nOwor
ICAgIGZvciAoYXV0byYgc3RhdGlzdGljIDogcHJldmFsZW50RG9tYWlucykgeworICAgICAgICBp
ZiAoIXN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24gJiYgKCFzaG91bGRDaGVja0ZvckdyYW5k
ZmF0aGVyaW5nIHx8ICFzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCkpCisgICAgICAgICAgICBwcmV2
YWxlbnRSZXNvdXJjZXMuYXBwZW5kKHN0YXRpc3RpYy5yZWdpc3RlcmFibGVEb21haW4pOworCisg
ICAgICAgIGlmIChzaG91bGRDbGVhckdyYW5kZmF0aGVyaW5nICYmIHN0YXRpc3RpYy5ncmFuZGZh
dGhlcmVkKQorICAgICAgICAgICAgZG9tYWluSURzVG9DbGVhckdyYW5kZmF0aGVyaW5nLmFwcGVu
ZChzdGF0aXN0aWMuZG9tYWluSUQpOworICAgIH0KKworICAgIGNsZWFyR3JhbmRmYXRoZXJpbmco
V1RGTW92ZShkb21haW5JRHNUb0NsZWFyR3JhbmRmYXRoZXJpbmcpKTsKKyAgICAKKyAgICByZXR1
cm4gcHJldmFsZW50UmVzb3VyY2VzOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlOjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgaWYgKG1f
b2JzZXJ2ZWREb21haW5Db3VudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKKyAgICAgICAgY291bnQg
PSBtX29ic2VydmVkRG9tYWluQ291bnQuZ2V0Q29sdW1uSW50KDApOworCisgICAgaW50IHJlc2V0
UmVzdWx0ID0gbV9vYnNlcnZlZERvbWFpbkNvdW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKKworICAgIGlmIChjb3Vu
dCA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAgICAgIHJldHVybjsK
KworICAgIEFTU0VSVChwYXJhbWV0ZXJzKCkucHJ1bmVFbnRyaWVzRG93blRvIDw9IHBhcmFtZXRl
cnMoKS5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisKKyAgICBzaXplX3QgY291bnRMZWZ0VG9QcnVu
ZSA9IGNvdW50IC0gcGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbzsKKyAgICBBU1NFUlQo
Y291bnRMZWZ0VG9QcnVuZSk7CisKKyAgICBTUUxpdGVTdGF0ZW1lbnQgcmVjb3Jkc1RvUHJ1bmUo
bV9kYXRhYmFzZSwgbWFrZVN0cmluZygiU0VMRUNUIGRvbWFpbklEIEZST00gT2JzZXJ2ZWREb21h
aW5zIE9SREVSIEJZIGhhZFVzZXJJbnRlcmFjdGlvbiwgaXNQcmV2YWxlbnQsIGxhc3RTZWVuIERF
U0MgTElNSVQgIiwgU3RyaW5nOjpudW1iZXIoY291bnRMZWZ0VG9QcnVuZSkpKTsKKyAgICBpZiAo
cmVjb3Jkc1RvUHJ1bmUucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICBSRUxFQVNF
X0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZTo6cHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQgZmFpbGVkLCBlcnJvciBtZXNzYWdlOiAle3B1
YmxpY31zIiwgdGhpcywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPHVu
c2lnbmVkPiBlbnRyaWVzVG9QcnVuZTsKKyAgICB3aGlsZSAocmVjb3Jkc1RvUHJ1bmUuc3RlcCgp
ID09IFNRTElURV9ST1cpCisgICAgICAgIGVudHJpZXNUb1BydW5lLmFwcGVuZChyZWNvcmRzVG9Q
cnVuZS5nZXRDb2x1bW5JbnQoMCkpOworCisgICAgYXV0byBsaXN0VG9QcnVuZSA9IGJ1aWxkTGlz
dChXVEY6Okl0ZXJhdG9yUmFuZ2U8VmVjdG9yPHVuc2lnbmVkPjo6aXRlcmF0b3I+KGVudHJpZXNU
b1BydW5lLmJlZ2luKCksIGVudHJpZXNUb1BydW5lLmVuZCgpKSk7CisKKyAgICBTUUxpdGVTdGF0
ZW1lbnQgcHJ1bmVDb21tYW5kKG1fZGF0YWJhc2UsIG1ha2VTdHJpbmcoIkRFTEVURSBmcm9tIE9i
c2VydmVkRG9tYWlucyBXSEVSRSBkb21haW5JRCBJTiAoIiwgbGlzdFRvUHJ1bmUsICIpIikpOwor
ICAgIGlmIChwcnVuZUNvbW1hbmQucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICB8fCBw
cnVuZUNvbW1hbmQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3Jl
OjpwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGlj
fXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OnVwZGF0ZUxhc3RTZWVuKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBkb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fdXBkYXRlTGFzdFNlZW5TdGF0ZW1lbnQuYmlu
ZERvdWJsZSgxLCBsYXN0U2Vlbi5zZWNvbmRzU2luY2VFcG9jaCgpLnZhbHVlKCkpICE9IFNRTElU
RV9PSworICAgICAgICB8fCBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LmJpbmRUZXh0KDIsIGRv
bWFpbi5zdHJpbmcoKSkgIT0gU1FMSVRFX09LCisgICAgICAgIHx8IG1fdXBkYXRlTGFzdFNlZW5T
dGF0ZW1lbnQuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjp1
cGRhdGVMYXN0U2VlbiBmYWlsZWQgdG8gYmluZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cyIs
IHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpbnQgcmVzZXRSZXN1
bHQgPSBtX3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50LnJlc2V0KCk7CisgICAgQVNTRVJUX1VOVVNF
RChyZXNldFJlc3VsdCwgcmVzZXRSZXN1bHQgPT0gU1FMSVRFX09LKTsKK30KKwordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbiwgU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0
cmFibGVEb21haW4oZG9tYWluKTsKKyAgICB1cGRhdGVMYXN0U2Vlbihkb21haW4sIFdhbGxUaW1l
Ojpmcm9tUmF3U2Vjb25kcyhzZWNvbmRzLnNlY29uZHMoKSkpOworfQorCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4o
ZG9tYWluKTsKKyAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShkb21haW4sIFJlc291cmNlTG9hZFBy
ZXZhbGVuY2U6OkhpZ2gpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFz
ZVN0b3JlOjpzZXRWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRvbWFpbikKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGVuc3Vy
ZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAgc2V0
UHJldmFsZW50UmVzb3VyY2UoZG9tYWluLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlOjpWZXJ5SGln
aCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIw
YmMzMmU1N2Q0NDg4YWIzZDM3NTg3NGY1NTBjZWNiOWE2NDBlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5oCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorCisjaW5j
bHVkZSAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSAiV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVEYXRhYmFz
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+CisjaW5jbHVkZSA8d3Rm
L0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgU1FMaXRlRGF0YWJh
c2U7CitjbGFzcyBTUUxpdGVTdGF0ZW1lbnQ7CitzdHJ1Y3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
czsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTsKKworLy8gVGhpcyBpcyBhbHdheXMgY29uc3RydWN0ZWQgLyB1c2VkIC8g
ZGVzdHJveWVkIG9uIHRoZSBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUncyBzdGF0aXN0
aWNzIHF1ZXVlLgorY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUgZmlu
YWwgOiBwdWJsaWMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIHsKK3B1YmxpYzoKKyAgICBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmLCBXb3JrUXVldWUmLCBjb25zdCBTdHJpbmcmIHN0b3JhZ2VEaXJlY3RvcnlQYXRo
KTsKKworICAgIHZvaWQgcG9wdWxhdGVGcm9tTWVtb3J5U3RvcmUoY29uc3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlJik7CisKKyAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVzb3VyY2Vz
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUlmTmVlZGVkKCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJl
cXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNz
JiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBn
cmFuZGZhdGhlckRhdGFGb3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+
Jikgb3ZlcnJpZGU7CisKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihj
b25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJh
bWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3RlZFRvRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlk
ZTsKKyAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRQcmV2YWxl
bnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQg
c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHNldEdyYW5kZmF0aGVyZWQoY29uc3QgUmVnaXN0cmFibGVEb21haW4m
LCBib29sIHZhbHVlKSBvdmVycmlkZTsKKyAgICBib29sIGlzR3JhbmRmYXRoZXJlZChjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRTdWJmcmFt
ZVVuZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBT
dWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJjZURv
bWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRUb3BG
cmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVj
dERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdEZy
b20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBjYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFn
ZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdl
SUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNj
ZXNzU3RhdHVzKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3Vi
RnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHVz
ZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0RvbWFp
biYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYsIGJv
b2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dV
c2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lk
IGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pIG92ZXJyaWRlOworICAgIHZvaWQgbG9n
U3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJl
ZGlyZWN0ZWRUb0RvbWFpbiYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbGVhclVzZXJJbnRlcmFj
dGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOworICAgIGJvb2wgaGFzSGFk
VXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgU2Vjb25kcykgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpbnNlcnRPYnNlcnZlZERvbWFpbihjb25zdCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzJik7CisgICAgdm9pZCBpbnNlcnREb21haW5SZWxhdGlvbnNo
aXBzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKKyAgICBib29sIGluc2VydERvbWFp
blJlbGF0aW9uc2hpcChXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmLCB1bnNpZ25lZCBkb21haW5J
RCwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWluKTsKKyAgICBib29sIHJl
bGF0aW9uc2hpcEV4aXN0cyhXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmLCB1bnNpZ25lZCBmaXJz
dERvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc2Vjb25kRG9tYWluKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBkb21haW5JRChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0Owor
I2lmbmRlZiBOREVCVUcKKyAgICBib29sIGNvbmZpcm1Eb21haW5Eb2VzTm90RXhpc3QoY29uc3Qg
UmVnaXN0cmFibGVEb21haW4mKSBjb25zdDsKKyNlbmRpZgorICAgIHZvaWQgdXBkYXRlTGFzdFNl
ZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBXYWxsVGltZSk7CisgICAgdm9pZCBzZXRVc2Vy
SW50ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBib29sIGhhZFVzZXJJbnRlcmFj
dGlvbiwgV2FsbFRpbWUpOworICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZG9tYWluc1Rv
QmxvY2soKSBjb25zdDsKKworICAgIHN0cnVjdCBQcmV2YWxlbnREb21haW5EYXRhIHsKKyAgICAg
ICAgdW5zaWduZWQgZG9tYWluSUQ7CisgICAgICAgIFJlZ2lzdHJhYmxlRG9tYWluIHJlZ2lzdGVy
YWJsZURvbWFpbjsKKyAgICAgICAgV2FsbFRpbWUgbW9zdFJlY2VudFVzZXJJbnRlcmFjdGlvblRp
bWU7CisgICAgICAgIGJvb2wgaGFkVXNlckludGVyYWN0aW9uOworICAgICAgICBib29sIGdyYW5k
ZmF0aGVyZWQ7CisgICAgfTsKKyAgICBWZWN0b3I8UHJldmFsZW50RG9tYWluRGF0YT4gcHJldmFs
ZW50RG9tYWlucygpIGNvbnN0OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gZmluZEV4cGlyZWRVc2Vy
SW50ZXJhY3Rpb25zKCkgY29uc3Q7CisgICAgdm9pZCBjbGVhckV4cGlyZWRVc2VySW50ZXJhY3Rp
b25zKCk7CisgICAgdm9pZCBjbGVhckdyYW5kZmF0aGVyaW5nKFZlY3Rvcjx1bnNpZ25lZD4mJik7
CisgICAgYm9vbCBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KHVuc2ln
bmVkIGRvbWFpbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0OworICAgIHZvaWQg
aW5jcmVtZW50UmVjb3Jkc0RlbGV0ZWRDb3VudEZvckRvbWFpbnMoSGFzaFNldDxSZWdpc3RyYWJs
ZURvbWFpbj4mJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlY2xhc3NpZnlSZXNvdXJjZXMoKTsK
KyAgICBzdHJ1Y3QgTm90VmVyeVByZXZhbGVudFJlc291cmNlcyB7CisgICAgICAgIFJlZ2lzdHJh
YmxlRG9tYWluIHJlZ2lzdGVyYWJsZURvbWFpbjsKKyAgICAgICAgUmVzb3VyY2VMb2FkUHJldmFs
ZW5jZSBwcmV2YWxlbmNlOworICAgICAgICB1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJh
bWVEb21haW5zQ291bnQ7CisgICAgICAgIHVuc2lnbmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzVG9Db3VudDsKKyAgICAgICAgdW5zaWduZWQgc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
c0NvdW50OworICAgICAgICB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQ7
CisgICAgfTsKKyAgICBIYXNoTWFwPHVuc2lnbmVkLCBOb3RWZXJ5UHJldmFsZW50UmVzb3VyY2Vz
PiBmaW5kTm90VmVyeVByZXZhbGVudFJlc291cmNlcygpOworCisgICAgYm9vbCBwcmVkaWNhdGVW
YWx1ZUZvckRvbWFpbihXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQmLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYpIGNvbnN0OworCisgICAgZW51bSBjbGFzcyBDb29raWVUcmVhdG1lbnRSZXN1bHQg
eyBBbGxvdywgQmxvY2tBbmRLZWVwLCBCbG9ja0FuZFB1cmdlIH07CisgICAgQ29va2llVHJlYXRt
ZW50UmVzdWx0IGNvb2tpZVRyZWF0bWVudEZvck9yaWdpbihjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVn
aXN0cmFibGVEb21haW4mLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsKKyAgICB1bnNpZ25lZCBy
ZWN1cnNpdmVseUZpbmROb25QcmV2YWxlbnREb21haW5zVGhhdFJlZGlyZWN0ZWRUb1RoaXNEb21h
aW4odW5zaWduZWQgcHJpbWFyeURvbWFpbklELCBTdGRTZXQ8dW5zaWduZWQ+JiBub25QcmV2YWxl
bnRSZWRpcmVjdGlvblNvdXJjZXMsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpOwor
ICAgIHZvaWQgc2V0RG9tYWluc0FzUHJldmFsZW50KFN0ZFNldDx1bnNpZ25lZD4mJik7CisgICAg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5hbChTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFt
ZURvbWFpbiYmLCBPcHRpb25hbDxGcmFtZUlEPiwgUGFnZUlELCBib29sIHVzZXJXYXNQcm9tcHRl
ZE5vd09yRWFybGllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJik7CisgICAgdm9p
ZCBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVudCgpOworICAgIFZlY3Rv
cjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdNb2Rl
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZW1vdmVEYXRhUmVjb3JkcyhDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKSBvdmVycmlk
ZTsKKyAgICBlbnVtIGNsYXNzIEFkZGVkUmVjb3JkIHsgTm8sIFllcyB9OworICAgIHN0ZDo6cGFp
cjxBZGRlZFJlY29yZCwgdW5zaWduZWQ+IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lz
dHJhYmxlRG9tYWluKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisgICAgVmVjdG9yPFJlZ2lz
dHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkg
b3ZlcnJpZGU7CisgICAgYm9vbCBpc0RhdGFiYXNlU3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICBib29sIGNyZWF0ZVNjaGVtYSgpOworICAgIGJvb2wgcHJlcGFyZVN0
YXRlbWVudHMoKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcgbV9zdG9yYWdlRGlyZWN0b3J5UGF0
aDsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CisgICAg
bXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9vYnNlcnZlZERvbWFpbkNvdW50Owor
ICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2luc2VydE9ic2VydmVkRG9tYWluU3RhdGVt
ZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX2luc2VydFRvcExldmVsRG9tYWlu
U3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fZG9tYWlu
SURGcm9tU3RyaW5nU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N0
b3JhZ2VBY2Nlc3NVbmRlclRvcEZyYW1lRG9tYWluc1N0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpT
UUxpdGVTdGF0ZW1lbnQgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvOworICAgIG11dGFibGUg
V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNUb0V4aXN0
czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV90b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c0Zyb207CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV90b3BGcmFtZVVu
aXF1ZVJlZGlyZWN0c0Zyb21FeGlzdHM7CisgICAgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
c3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluczsKKyAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCBtX3N1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbkV4aXN0czsKKyAgICBXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zOwor
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluRXhpc3RzOworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJl
c291cmNlVW5pcXVlUmVkaXJlY3RzVG87CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0
ZW1lbnQgbV9zdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvRXhpc3RzOworICAgIFdlYkNvcmU6
OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzRnJvbTsKKyAgICBt
dXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RzRnJvbUV4aXN0czsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9tb3N0UmVjZW50
VXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBt
X3VwZGF0ZUxhc3RTZWVuU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBt
X3VwZGF0ZVByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6
U1FMaXRlU3RhdGVtZW50IG1faXNQcmV2YWxlbnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBXZWJD
b3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV91cGRhdGVWZXJ5UHJldmFsZW50UmVzb3VyY2VTdGF0ZW1l
bnQ7CisgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pc1ZlcnlQcmV2YWxl
bnRSZXNvdXJjZVN0YXRlbWVudDsKKyAgICBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9jbGVh
clByZXZhbGVudFJlc291cmNlU3RhdGVtZW50OworICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50IG1faGFkVXNlckludGVyYWN0aW9uU3RhdGVtZW50OworICAgIFdlYkNvcmU6OlNR
TGl0ZVN0YXRlbWVudCBtX3VwZGF0ZUdyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7CisgICAgbXV0YWJs
ZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9pc0dyYW5kZmF0aGVyZWRTdGF0ZW1lbnQ7Cisg
ICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9maW5kRXhwaXJlZFVzZXJJbnRl
cmFjdGlvblN0YXRlbWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlJiBzdG9yZSkgeyByZXR1cm4gc3RvcmUuaXNEYXRhYmFzZVN0b3Jl
KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCmluZGV4IDE3Y2E1
N2Y4ZjE0ZGFmYjc4YmE4YmNhZjBiMTJjYTkzZGI4NTAzYTguLjU4NjFkYmE3Yjc0YWM5OTllN2E3
Y2Q1ZTBjODgwNzliZTEzZmU0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzTWVtb3J5U3RvcmUuY3BwCkBAIC00OSw5NCArNDksNiBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBjb25zdGV4cHIgdW5zaWduZWQgc3Rh
dGlzdGljc01vZGVsVmVyc2lvbiB7IDE1IH07Ci1jb25zdGV4cHIgdW5zaWduZWQgbWF4TnVtYmVy
T2ZSZWN1cnNpdmVDYWxsc0luUmVkaXJlY3RUcmFjZUJhY2sgeyA1MCB9OwotY29uc3RleHByIFNl
Y29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5nSW50ZXJ2YWwgeyA1X3MgfTsKLWNvbnN0
ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRvdyB7IDMwIH07Ci1jb25zdGV4cHIgdW5z
aWduZWQgbWF4SW1wb3J0YW5jZSB7IDMgfTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAot
c3RhdGljIFN0cmluZyBkb21haW5zVG9TdHJpbmcoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9t
YWluPiYgZG9tYWlucykKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgZm9yIChh
dXRvJiBkb21haW4gOiBkb21haW5zKSB7Ci0gICAgICAgIGlmICghYnVpbGRlci5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgIik7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGRvbWFpbi5zdHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLnRv
U3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotY2xhc3MgT3BlcmF0aW5nRGF0ZSB7Ci1wdWJsaWM6Ci0g
ICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKLQotICAgIHN0YXRpYyBPcGVyYXRpbmdEYXRl
IGZyb21XYWxsVGltZShXYWxsVGltZSB0aW1lKQotICAgIHsKLSAgICAgICAgZG91YmxlIG1zID0g
dGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxpc2Vjb25kcygpOwotICAgICAgICBpbnQgeWVh
ciA9IG1zVG9ZZWFyKG1zKTsKLSAgICAgICAgaW50IHllYXJEYXkgPSBkYXlJblllYXIobXMsIHll
YXIpOwotICAgICAgICBpbnQgbW9udGggPSBtb250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNM
ZWFwWWVhcih5ZWFyKSk7Ci0gICAgICAgIGludCBtb250aERheSA9IGRheUluTW9udGhGcm9tRGF5
SW5ZZWFyKHllYXJEYXksIGlzTGVhcFllYXIoeWVhcikpOwotCi0gICAgICAgIHJldHVybiBPcGVy
YXRpbmdEYXRlIHsgeWVhciwgbW9udGgsIG1vbnRoRGF5IH07Ci0gICAgfQotCi0gICAgc3RhdGlj
IE9wZXJhdGluZ0RhdGUgdG9kYXkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9wZXJhdGluZ0Rh
dGU6OmZyb21XYWxsVGltZShXYWxsVGltZTo6bm93KCkpOwotICAgIH0KLQotICAgIFNlY29uZHMg
c2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFNlY29uZHMg
eyBkYXRlVG9EYXlzRnJvbTE5NzAobV95ZWFyLCBtX21vbnRoLCBtX21vbnRoRGF5KSAqIHNlY29u
ZHNQZXJEYXkgfTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3BlcmF0aW5n
RGF0ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9tb250aERheSA9PSBv
dGhlci5tX21vbnRoRGF5ICYmIG1fbW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0g
b3RoZXIubV95ZWFyOwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IE9wZXJhdGlu
Z0RhdGUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNlY29uZHNTaW5jZUVw
b2NoKCkgPCBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOwotICAgIH0KLQotICAgIGJvb2wgb3Bl
cmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBzZWNvbmRzU2luY2VFcG9jaCgpIDw9IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250
aCwgaW50IG1vbnRoRGF5KQotICAgICAgICA6IG1feWVhcih5ZWFyKQotICAgICAgICAsIG1fbW9u
dGgobW9udGgpCi0gICAgICAgICwgbV9tb250aERheShtb250aERheSkKLSAgICB7IH0KLQotICAg
IGludCBtX3llYXIgeyAwIH07Ci0gICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCi0g
ICAgaW50IG1fbW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCi19OwotCi1zdGF0aWMgVmVjdG9y
PE9wZXJhdGluZ0RhdGU+IG1lcmdlT3BlcmF0aW5nRGF0ZXMoY29uc3QgVmVjdG9yPE9wZXJhdGlu
Z0RhdGU+JiBleGlzdGluZ0RhdGVzLCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mJiBuZXdEYXRlcykK
LXsKLSAgICBpZiAoZXhpc3RpbmdEYXRlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBXVEZN
b3ZlKG5ld0RhdGVzKTsKLQotICAgIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiBtZXJnZWREYXRlcyhl
eGlzdGluZ0RhdGVzLnNpemUoKSArIG5ld0RhdGVzLnNpemUoKSk7Ci0KLSAgICAvLyBNZXJnZSB0
aGUgdHdvIHNvcnRlZCB2ZWN0b3JzIG9mIGRhdGVzLgotICAgIHN0ZDo6bWVyZ2UoZXhpc3RpbmdE
YXRlcy5iZWdpbigpLCBleGlzdGluZ0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigpLCBuZXdE
YXRlcy5lbmQoKSwgbWVyZ2VkRGF0ZXMuYmVnaW4oKSk7Ci0gICAgLy8gUmVtb3ZlIGR1cGxpY2F0
ZSBkYXRlcy4KLSAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsKLQotICAg
IC8vIERyb3Agb2xkIGRhdGVzIHVudGlsIHRoZSBWZWN0b3Igc2l6ZSByZWFjaGVzIG9wZXJhdGlu
Z0RhdGVzV2luZG93LgotICAgIHdoaWxlIChtZXJnZWREYXRlcy5zaXplKCkgPiBvcGVyYXRpbmdE
YXRlc1dpbmRvdykKLSAgICAgICAgbWVyZ2VkRGF0ZXMucmVtb3ZlKDApOwotCi0gICAgcmV0dXJu
IG1lcmdlZERhdGVzOwotfQogCiBzdHJ1Y3QgU3RhdGlzdGljc0xhc3RTZWVuIHsKICAgICBSZWdp
c3RyYWJsZURvbWFpbiBkb21haW47CkBAIC0xNTUsMzYgKzY3LDI0IEBAIHN0YXRpYyB2b2lkIHBy
dW5lUmVzb3VyY2VzKEhhc2hNYXA8UmVnaXN0cmFibGVEb21haW4sIFJlc291cmNlTG9hZFN0YXRp
c3RpY3M+JiBzCiAgICAgICAgIHN0YXRpc3RpY3NNYXAucmVtb3ZlKHN0YXRpc3RpY3NUb1BydW5l
W2ldLmRvbWFpbik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjb21wdXRlSW1wb3J0YW5jZShjb25z
dCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykKLXsKLSAgICB1bnNp
Z25lZCBpbXBvcnRhbmNlID0gbWF4SW1wb3J0YW5jZTsKLSAgICBpZiAoIXJlc291cmNlU3RhdGlz
dGljLmlzUHJldmFsZW50UmVzb3VyY2UpCi0gICAgICAgIGltcG9ydGFuY2UgLT0gMTsKLSAgICBp
ZiAoIXJlc291cmNlU3RhdGlzdGljLmhhZFVzZXJJbnRlcmFjdGlvbikKLSAgICAgICAgaW1wb3J0
YW5jZSAtPSAyOwotICAgIHJldHVybiBpbXBvcnRhbmNlOwotfQotCiBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtRdWV1ZSkK
LSAgICA6IG1fc3RvcmUoc3RvcmUpCi0gICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUpCisgICAg
OiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoc3RvcmUsIHdvcmtRdWV1ZSkKIHsKICAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJl
Z2lzdGVyVXNlckRlZmF1bHRzSWZOZWVkZWQoKTsKICNlbmRpZgotICAgIGluY2x1ZGVUb2RheUFz
T3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCk7CiAKLSAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hB
ZnRlcig1X3MsIFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0geworICAgIHdvcmtRdWV1
ZS5kaXNwYXRjaEFmdGVyKDVfcywgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpXSB7CiAg
ICAgICAgIGlmICh3ZWFrVGhpcykKICAgICAgICAgICAgIHdlYWtUaGlzLT5jYWxjdWxhdGVBbmRT
dWJtaXRUZWxlbWV0cnkoKTsKICAgICB9KTsKIH0KIAotUmVzb3VyY2VMb2FkU3RhdGlzdGljc01l
bW9yeVN0b3JlOjp+UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlKCkKK2Jvb2wgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICByZXR1cm4gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuaXNFbXB0eSgpOwogfQogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6c2V0UGVyc2lzdGVudFN0b3JhZ2UoUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3Rl
bnRTdG9yYWdlJiBwZXJzaXN0ZW50U3RvcmFnZSkKQEAgLTE5Niw3OSArOTYsMTYgQEAgdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVt
ZXRyeSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBp
ZiAobV9wYXJhbWV0ZXJzLnNob3VsZFN1Ym1pdFRlbGVtZXRyeSkKKyAgICBpZiAocGFyYW1ldGVy
cygpLnNob3VsZFN1Ym1pdFRlbGVtZXRyeSkKICAgICAgICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1RlbGVtZXRyeTo6Y2FsY3VsYXRlQW5kU3VibWl0KCp0aGlzKTsKIH0KIAotdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNv
cmRzV2VyZVNjYW5uZWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLSAgICBtX3BhcmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNX
ZXJlU2Nhbm5lZCA9IHZhbHVlOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwoYm9vbCB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBt
X3BhcmFtZXRlcnMuc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92
YWwgPSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShib29sIHZhbHVlKQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIG1fcGFyYW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkg
PSB2YWx1ZTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJl
bW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3Zv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppbmNyZW1lbnRSZWNvcmRzRGVs
ZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNX
aXRoRGVsZXRlZFdlYnNpdGVEYXRhKQogewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKCFzaG91bGRSZW1vdmVEYXRhUmVjb3JkcygpKSB7Ci0gICAgICAgIGNhbGxi
YWNrKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKLSAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5jbGVhcigpOwotICAgIGZvciAoY29u
c3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdp
blByb2Nlc3NlcygpKQotICAgICAgICBtX2FjdGl2ZVBsdWdpblRva2Vucy5hZGQocGx1Z2luLT5w
bHVnaW5Qcm9jZXNzVG9rZW4oKSk7Ci0jZW5kaWYKLQotICAgIGF1dG8gcHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zID0gcmVnaXN0cmFibGVEb21haW5zVG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwot
ICAgIGlmIChwcmV2YWxlbnRSZXNvdXJjZURvbWFpbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNh
bGxiYWNrKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSB7CisgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRvbWFpbik7CisgICAg
ICAgICsrc3RhdGlzdGljLmRhdGFSZWNvcmRzUmVtb3ZlZDsKICAgICB9Ci0KLSNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKLSAgICBSRUxFQVNFX0xPR19JTkZPX0lGKG1fZGVidWdMb2dnaW5nRW5h
YmxlZCwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gcmVtb3ZlIGRhdGEg
cmVjb3JkcyBmb3IgJXtwdWJsaWN9cy4iLCBkb21haW5zVG9TdHJpbmcocHJldmFsZW50UmVzb3Vy
Y2VEb21haW5zKS51dGY4KCkuZGF0YSgpKTsKLSNlbmRpZgotCi0gICAgc2V0RGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQodHJ1ZSk7Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3ByZXZh
bGVudFJlc291cmNlRG9tYWlucyA9IGNyb3NzVGhyZWFkQ29weShwcmV2YWxlbnRSZXNvdXJjZURv
bWFpbnMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9
IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
LCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5jb3B5UmVmKCldICgpIG11dGFibGUgewotICAgICAg
ICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgd2Vha1RoaXMtPm1fc3RvcmUuZGVsZXRlV2Vi
c2l0ZURhdGFGb3JSZWdpc3RyYWJsZURvbWFpbnNJbkFsbFBlcnNpc3RlbnREYXRhU3RvcmVzKFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bW9uaXRvcmVkRGF0YVR5cGVzKCksIFdURk1v
dmUocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJl
Y29yZHNXZXJlU2Nhbm5lZCwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlz
ID0gV1RGTW92ZSh3ZWFrVGhpcyksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5UmVmKCldKGNv
bnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zV2l0aERlbGV0ZWRXZWJzaXRl
RGF0YSkgbXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFtkb21haW5z
V2l0aERlbGV0ZWRXZWJzaXRlRGF0YSA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zV2l0aERlbGV0
ZWRXZWJzaXRlRGF0YSksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdlYWtUaGlzID0g
V1RGTW92ZSh3ZWFrVGhpcyldICgpIG11dGFibGUgewotICAgICAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGRvbWFpbiA6IGRvbWFpbnNXaXRoRGVsZXRlZFdlYnNpdGVEYXRhKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHN0YXRpc3RpYyA9IHdlYWtUaGlzLT5lbnN1cmVSZXNvdXJjZVN0YXRp
c3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkb21haW4pOwotICAgICAgICAgICAgICAgICAgICAr
K3N0YXRpc3RpYy5kYXRhUmVjb3Jkc1JlbW92ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHdlYWtUaGlzLT5zZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2soKTsKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5tX2RlYnVnTG9nZ2lu
Z0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgcmVtb3ZpbmcgZGF0
YSByZWNvcmRzLiIpOwotI2VuZGlmCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAg
fSk7CiB9CiAKIHVuc2lnbmVkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVj
dXJzaXZlbHlHZXRBbGxEb21haW5zVGhhdEhhdmVSZWRpcmVjdGVkVG9UaGlzRG9tYWluKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291cmNlU3RhdGlzdGljLCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPiYgZG9tYWluc1RoYXRIYXZlUmVkaXJlY3RlZFRvLCB1bnNpZ25lZCBudW1i
ZXJPZlJlY3Vyc2l2ZUNhbGxzKSBjb25zdApAQCAtMzI5LDUzICsxNjYsNDAgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6Om1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJl
Y3RlZFRvUHJldmFsZW4KIAogYm9vbCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OmlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3Vy
Y2VTdGF0aXN0aWMpCiB7Ci0gICAgaWYgKCFtX2RlYnVnTW9kZUVuYWJsZWQpCisgICAgaWYgKCFk
ZWJ1Z01vZGVFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBy
ZXNvdXJjZVN0YXRpc3RpYy5yZWdpc3RyYWJsZURvbWFpbiA9PSBtX2RlYnVnU3RhdGljUHJldmFs
ZW50UmVzb3VyY2UgfHwgcmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gbV9k
ZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlOworICAgIHJldHVybiByZXNvdXJjZVN0YXRpc3Rp
Yy5yZWdpc3RyYWJsZURvbWFpbiA9PSBkZWJ1Z1N0YXRpY1ByZXZhbGVudFJlc291cmNlKCkgfHwg
cmVzb3VyY2VTdGF0aXN0aWMucmVnaXN0cmFibGVEb21haW4gPT0gZGVidWdNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSgpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xhc3NpZnlQcmV2YWxlbnRSZXNvdXJjZXMoKQogewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKG1fcGFyYW1ldGVycy5zaG91
bGRDbGFzc2lmeVJlc291cmNlc0JlZm9yZURhdGFSZWNvcmRzUmVtb3ZhbCkgewotICAgICAgICBm
b3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAudmFs
dWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChpc1ByZXZhbGVudER1ZVRvRGVidWdNb2RlKHJlc291
cmNlU3RhdGlzdGljKSkKLSAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShyZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgICAg
ICBlbHNlIGlmICghcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpIHsK
LSAgICAgICAgICAgICAgICBtYXJrQXNQcmV2YWxlbnRJZkhhc1JlZGlyZWN0ZWRUb1ByZXZhbGVu
dChyZXNvdXJjZVN0YXRpc3RpYyk7Ci0gICAgICAgICAgICAgICAgYXV0byBjdXJyZW50UHJldmFs
ZW5jZSA9IHJlc291cmNlU3RhdGlzdGljLmlzUHJldmFsZW50UmVzb3VyY2UgPyBSZXNvdXJjZUxv
YWRQcmV2YWxlbmNlOjpIaWdoIDogUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6TG93OwotICAgICAg
ICAgICAgICAgIGF1dG8gbmV3UHJldmFsZW5jZSA9IG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXIuY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHJlc291cmNlU3RhdGlzdGljLCBj
dXJyZW50UHJldmFsZW5jZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld1ByZXZhbGVuY2UgIT0g
Y3VycmVudFByZXZhbGVuY2UpCi0gICAgICAgICAgICAgICAgICAgIHNldFByZXZhbGVudFJlc291
cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQcmV2YWxlbmNlKTsKLSAgICAgICAgICAgIH0KKyAg
ICBmb3IgKGF1dG8mIHJlc291cmNlU3RhdGlzdGljIDogbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXAu
dmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUocmVzb3Vy
Y2VTdGF0aXN0aWMpKQorICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2UocmVzb3VyY2VT
dGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOworICAgICAgICBlbHNlIGlm
ICghcmVzb3VyY2VTdGF0aXN0aWMuaXNWZXJ5UHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIG1hcmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KHJlc291cmNlU3Rh
dGlzdGljKTsKKyAgICAgICAgICAgIGF1dG8gY3VycmVudFByZXZhbGVuY2UgPSByZXNvdXJjZVN0
YXRpc3RpYy5pc1ByZXZhbGVudFJlc291cmNlID8gUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGln
aCA6IFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkxvdzsKKyAgICAgICAgICAgIGF1dG8gbmV3UHJl
dmFsZW5jZSA9IGNsYXNzaWZpZXIoKS5jYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UocmVzb3Vy
Y2VTdGF0aXN0aWMsIGN1cnJlbnRQcmV2YWxlbmNlKTsKKyAgICAgICAgICAgIGlmIChuZXdQcmV2
YWxlbmNlICE9IGN1cnJlbnRQcmV2YWxlbmNlKQorICAgICAgICAgICAgICAgIHNldFByZXZhbGVu
dFJlc291cmNlKHJlc291cmNlU3RhdGlzdGljLCBuZXdQcmV2YWxlbmNlKTsKICAgICAgICAgfQog
ICAgIH0KK30KIAotICAgIHJlbW92ZURhdGFSZWNvcmRzKFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VX
ZWFrUHRyKCp0aGlzKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgICAgIGlmICghd2Vha1RoaXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgcHJ1bmVTdGF0aXN0aWNzSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKG1fcGVyc2lzdGVu
dFN0b3JhZ2UpCi0gICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5zY2hlZHVsZU9yV3Jp
dGVNZW1vcnlTdG9yZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U6OkZv
cmNlSW1tZWRpYXRlV3JpdGU6Ok5vKTsKLQotICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy5zaG91
bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKV0oKSB7Ci0gICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykKLSAgICAgICAgICAgICAgICByZXR1
cm47Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJ
Zk5lZWRlZCgpCit7CisgICAgaWYgKG1fcGVyc2lzdGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVy
c2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0
YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6Tm8pOworfQog
Ci0gICAgICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9jZXNz
ZWQoKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Cit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c3luY1N0b3JhZ2VJbW1lZGlhdGVseSgpCit7CisgICAgaWYgKG1fcGVyc2lz
dGVudFN0b3JhZ2UpCisgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0
ZU1lbW9yeVN0b3JlKFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9y
Y2VJbW1lZGlhdGVXcml0ZTo6WWVzKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1
YkZyYW1lRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIE9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFp
biYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFRvcEZyYW1lRG9tYWluJiB0b3BGcmFtZURvbWFpbiwg
T3B0aW9uYWw8RnJhbWVJRD4gZnJhbWVJRCwgUGFnZUlEIHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxv
b3A6OmlzTWFpbigpKTsKIApAQCAtMzkwLDcgKzIxNCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc01lbW9yeVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0
Y2goW3N0b3JlID0gbWFrZVJlZihtX3N0b3JlKSwgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURv
bWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNw
YXRjaChbc3RvcmUgPSBtYWtlUmVmKHN0b3JlKCkpLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlz
b2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIHN0b3JlLT5jYWxsSGFz
U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21h
aW4sIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBbc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgcmVzdWx0
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRj
aChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgcmVzdWx0
XSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQp
OwpAQCAtMzk5LDE0ICsyMjMsMTQgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6Omhhc1N0b3JhZ2VBY2Nlc3MoY29uc3QgUmVnaXN0cmFibGVEb21haW4KICAgICB9KTsK
IH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9y
YWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxl
RG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJ
RCwgYm9vbCBwcm9tcHRFbmFibGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VBY2Nl
c3NTdGF0dXMpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYgc3Vi
RnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIEZyYW1lSUQgZnJh
bWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBhdXRvJiBzdWJGcmFtZVN0YXRp
c3RpYyA9IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHN1YkZy
YW1lRG9tYWluKTsKICAgICBpZiAoc2hvdWxkQmxvY2tBbmRQdXJnZUNvb2tpZXMoc3ViRnJhbWVT
dGF0aXN0aWMpKSB7CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0Vf
TE9HX0lORk9fSUYobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWcsICJDYW5ub3QgZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8gJXtwdWJsaWN9cyBzaW5jZSBp
dHMgY29va2llcyBhcmUgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cyBhbmQgaXQgaGFz
IG5vdCByZWNlaXZlZCB1c2VyIGludGVyYWN0aW9uIGFzIGZpcnN0LXBhcnR5LiIsIHN1YkZyYW1l
RG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZP
X0lGKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAi
Q2Fubm90IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tp
ZXMgYXJlIGJsb2NrZWQgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgYW5kIGl0IGhhcyBub3QgcmVj
ZWl2ZWQgdXNlciBpbnRlcmFjdGlvbiBhcyBmaXJzdC1wYXJ0eS4iLCBzdWJGcmFtZURvbWFpbi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihTdG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNDE0LDcgKzIzOCw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmCiAKICAgICBp
ZiAoIXNob3VsZEJsb2NrQW5kS2VlcENvb2tpZXMoc3ViRnJhbWVTdGF0aXN0aWMpKSB7CiAjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1
Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJObyBuZWVkIHRv
IGdyYW50IHN0b3JhZ2UgYWNjZXNzIHRvICV7cHVibGljfXMgc2luY2UgaXRzIGNvb2tpZXMgYXJl
IG5vdCBibG9ja2VkIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzLiIsIHN1YkZyYW1lRG9tYWluLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKGRlYnVn
TG9nZ2luZ0VuYWJsZWQoKSwgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiTm8gbmVlZCB0
byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHNpbmNlIGl0cyBjb29raWVzIGFy
ZSBub3QgYmxvY2tlZCBpbiB0aGlyZC1wYXJ0eSBjb250ZXh0cy4iLCBzdWJGcmFtZURvbWFpbi5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihTdG9yYWdlQWNjZXNzU3RhdHVzOjpIYXNBY2Nlc3MpOwogICAgICAgICByZXR1cm47CkBAIC00
MjMsMTMgKzI0NywxMyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoUmVnaXN0cmFibGVEb21haW4mJgogICAgIGF1dG8gdXNlcldh
c1Byb21wdGVkRWFybGllciA9IHByb21wdEVuYWJsZWQgJiYgaGFzVXNlckdyYW50ZWRTdG9yYWdl
QWNjZXNzVGhyb3VnaFByb21wdChzdWJGcmFtZVN0YXRpc3RpYywgdG9wRnJhbWVEb21haW4pOwog
ICAgIGlmIChwcm9tcHRFbmFibGVkICYmICF1c2VyV2FzUHJvbXB0ZWRFYXJsaWVyKSB7CiAjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk9fSUYobV9kZWJ1
Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byBh
c2sgdGhlIHVzZXIgd2hldGhlciB0aGV5IHdhbnQgdG8gZ3JhbnQgc3RvcmFnZSBhY2Nlc3MgdG8g
JXtwdWJsaWN9cyB1bmRlciAle3B1YmxpY31zIG9yIG5vdC4iLCBzdWJGcmFtZURvbWFpbi5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIGFzayB0aGUgdXNlciB3aGV0aGVy
IHRoZXkgd2FudCB0byBncmFudCBzdG9yYWdlIGFjY2VzcyB0byAle3B1YmxpY31zIHVuZGVyICV7
cHVibGljfXMgb3Igbm90LiIsIHN1YkZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IHRvcEZyYW1lRG9tYWluLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogI2VuZGlmCiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFN0b3JhZ2VBY2Nlc3NTdGF0dXM6OlJlcXVpcmVzVXNlclByb21w
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgaWYgKHVzZXJXYXNQcm9tcHRlZEVhcmxp
ZXIpIHsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5G
T19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IlN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9
cy4iLCBzdWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFp
bi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRihk
ZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIlN0b3Jh
Z2UgYWNjZXNzIHdhcyBncmFudGVkIHRvICV7cHVibGljfXMgdW5kZXIgJXtwdWJsaWN9cy4iLCBz
dWJGcmFtZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0b3BGcmFtZURvbWFpbi5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgogICAgIH0KIApAQCAtNDQwLDcgKzI2NCw3IEBA
IHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFj
Y2VzcyhSZWdpc3RyYWJsZURvbWFpbiYmCiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3BlbmVyKFJl
Z2lzdHJhYmxlRG9tYWluJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzLCB1aW50NjRfdCBv
cGVuZXJQYWdlSUQsIFJlZ2lzdHJhYmxlRG9tYWluJiYgb3BlbmVyRG9tYWluKQordm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJP
cGVuZXIoRG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzJiYgZG9tYWluSW5OZWVkT2ZTdG9yYWdl
QWNjZXNzLCBPcGVuZXJQYWdlSUQgb3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJiBvcGVuZXJE
b21haW4pCiB7CiAgICAgQVNTRVJUKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyAhPSBvcGVu
ZXJEb21haW4pOwogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtNDU2LDEyICsy
ODAsMTIgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlcXVlc3RT
dG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoUmVnaXN0cmEKICAgICAgICAgcmV0dXJuOwogCiAjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9n
Z2luZ0VuYWJsZWQsIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29t
YmF0aWJpbGl0eSBmaXhdIFN0b3JhZ2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31z
IHVuZGVyIG9wZW5lciBwYWdlIGZyb20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9u
IGluIHRoZSBvcGVuZWQgd2luZG93LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBvcGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihkZWJ1Z0xvZ2dpbmdFbmFibGVkKCksIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1ZywgIltUZW1wb3JhcnkgY29tYmF0aWJpbGl0eSBmaXhdIFN0b3Jh
Z2UgYWNjZXNzIHdhcyBncmFudGVkIGZvciAle3B1YmxpY31zIHVuZGVyIG9wZW5lciBwYWdlIGZy
b20gJXtwdWJsaWN9cywgd2l0aCB1c2VyIGludGVyYWN0aW9uIGluIHRoZSBvcGVuZWQgd2luZG93
LiIsIGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBv
cGVuZXJEb21haW4uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICBncmFudFN0
b3JhZ2VBY2Nlc3NJbnRlcm5hbChXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2Vzcyks
IFdURk1vdmUob3BlbmVyRG9tYWluKSwgV1RGOjpudWxsb3B0LCBvcGVuZXJQYWdlSUQsIGZhbHNl
LCBbXShib29sKSB7IH0pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21h
aW4sIFJlZ2lzdHJhYmxlRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQs
IHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYg
c3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTQ3Myw3ICsyOTcsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNzKFJlZ2lzdHJh
YmxlRG9tYWluJiYgcwogICAgIGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFdURk1vdmUoc3Vi
RnJhbWVEb21haW4pLCBXVEZNb3ZlKHRvcEZyYW1lRG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCB1
c2VyV2FzUHJvbXB0ZWROb3csIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0lu
dGVybmFsKFJlZ2lzdHJhYmxlRG9tYWluJiYgc3ViRnJhbWVEb21haW4sIFJlZ2lzdHJhYmxlRG9t
YWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCB1aW50NjRf
dCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYg
c3ViRnJhbWVEb21haW4sIFRvcEZyYW1lRG9tYWluJiYgdG9wRnJhbWVEb21haW4sIE9wdGlvbmFs
PEZyYW1lSUQ+IGZyYW1lSUQsIFBhZ2VJRCBwYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQogewog
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC00ODMsMTQgKzMwNywxNCBAQCB2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Z3JhbnRTdG9yYWdlQWNjZXNz
SW50ZXJuYWwoUmVnaXN0cmFibGVEbwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBSZW1vdmUgbV9z
dG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgY2hlY2sgaWYgcHJvbXB0aW5nIGlzIG5vIGxvbmdl
ciBleHBlcmltZW50YWwuCi0gICAgaWYgKHVzZXJXYXNQcm9tcHRlZE5vd09yRWFybGllciAmJiBt
X3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCkgeworICAgIGlmICh1c2VyV2FzUHJvbXB0ZWRO
b3dPckVhcmxpZXIgJiYgc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCkpIHsKICAgICAgICAg
YXV0byYgc3ViRnJhbWVTdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihzdWJGcmFtZURvbWFpbik7CiAgICAgICAgIEFTU0VSVChzdWJGcmFtZVN0
YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pOwogICAgICAgICBBU1NFUlQoc3ViRnJhbWVTdGF0
aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1l
RG9tYWluKSk7CiAgICAgICAgIHN1YkZyYW1lU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJh
Y3Rpb25UaW1lID0gV2FsbFRpbWU6Om5vdygpOwogICAgIH0KIAotICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHko
KSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJ
RCwgcGFnZUlELCBzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldKCkgbXV0YWJsZSB7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdWJG
cmFtZURvbWFpbiA9IHN1YkZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFp
biA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHN0b3Jl
ID0gbWFrZVJlZihzdG9yZSgpKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRh
YmxlIHsKICAgICAgICAgc3RvcmUtPmNhbGxHcmFudFN0b3JhZ2VBY2Nlc3NIYW5kbGVyKHN1YkZy
YW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY2FsbGJhY2sgPSBX
VEZNb3ZlKGNhbGxiYWNrKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCldKGJvb2wgdmFsdWUpIG11
dGFibGUgewogICAgICAgICAgICAgc3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB2YWx1ZV0gKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICAgICAgY2FsbGJhY2sodmFsdWUpOwpAQCAtNDk5LDEwNSArMzIzLDM4IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpncmFudFN0b3JhZ2VBY2Nlc3NJbnRlcm5h
bChSZWdpc3RyYWJsZURvCiAgICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmdyYW5kZmF0aGVyRGF0YUZvckRvbWFpbnMoY29uc3QgSGFzaFNldDxSZWdpc3Ry
YWJsZURvbWFpbj4mIGRvbWFpbnMpCiB7Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0KLSAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBzaG91bGROb3RpZnlQYWdlc1do
ZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkID0gbV9wYXJhbWV0ZXJzLnNob3VsZE5vdGlmeVBhZ2Vz
V2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQsIHdvcmtRdWV1ZSA9IG1fd29ya1F1ZXVlLmNvcHlS
ZWYoKSwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgc3Rv
cmUtPnJlZ2lzdHJhYmxlRG9tYWluc1dpdGhXZWJzaXRlRGF0YShXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBzaG91bGROb3RpZnlQYWdlc1doZW5E
YXRhUmVjb3Jkc1dlcmVTY2FubmVkLCBbd2Vha1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd29ya1F1ZXVlID0gd29ya1F1ZXVlLmNvcHlSZWYo
KV0gKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSkg
bXV0YWJsZSB7Ci0gICAgICAgICAgICB3b3JrUXVldWUtPmRpc3BhdGNoKFt3ZWFrVGhpcyA9IFdU
Rk1vdmUod2Vha1RoaXMpLCBkb21haW5zV2l0aFdlYnNpdGVEYXRhID0gY3Jvc3NUaHJlYWRDb3B5
KGRvbWFpbnNXaXRoV2Vic2l0ZURhdGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAo
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFp
bnNXaXRoV2Vic2l0ZURhdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byYgc3RhdGlzdGlj
ID0gd2Vha1RoaXMtPmVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWlu
KGRvbWFpbik7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpYy5ncmFuZGZhdGhlcmVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2Vha1RoaXMtPm1fZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpub3coKSArIHdlYWtUaGlzLT5t
X3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lOwotICAgICAgICAgICAgICAgIGlmICh3ZWFr
VGhpcy0+bV9wZXJzaXN0ZW50U3RvcmFnZSkKLSAgICAgICAgICAgICAgICAgICAgd2Vha1RoaXMt
Pm1fcGVyc2lzdGVudFN0b3JhZ2UtPnNjaGVkdWxlT3JXcml0ZU1lbW9yeVN0b3JlKFJlc291cmNl
TG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTo6Rm9yY2VJbW1lZGlhdGVXcml0ZTo6WWVz
KTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwotICAgICAgICAgICAgICAgIHdlYWtUaGlz
LT5sb2dUZXN0aW5nRXZlbnQoIkdyYW5kZmF0aGVyZWQiX3MpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOwotICAgIH0pOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9tYWlucykgewor
ICAgICAgICBhdXRvJiBzdGF0aXN0aWMgPSBlbnN1cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdp
c3RyYWJsZURvbWFpbihkb21haW4pOworICAgICAgICBzdGF0aXN0aWMuZ3JhbmRmYXRoZXJlZCA9
IHRydWU7CisgICAgfQogfQogCiBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6ZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9yRGVidWdN
b2RlKCkKIHsKLSAgICBpZiAoIW1fZGVidWdNb2RlRW5hYmxlZCkKKyAgICBpZiAoIWRlYnVnTW9k
ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZWdpc3RyYWJs
ZURvbWFpbj4gZG9tYWluc1RvQmxvY2s7CiAgICAgZG9tYWluc1RvQmxvY2sucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSgyKTsKIAotICAgIGF1dG8mIHN0YXRpY1Nlc291cmNlU3RhdGlzdGljID0gZW5z
dXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4obV9kZWJ1Z1N0YXRpY1By
ZXZhbGVudFJlc291cmNlKTsKKyAgICBhdXRvJiBzdGF0aWNTZXNvdXJjZVN0YXRpc3RpYyA9IGVu
c3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKGRlYnVnU3RhdGljUHJl
dmFsZW50UmVzb3VyY2UoKSk7CiAgICAgc2V0UHJldmFsZW50UmVzb3VyY2Uoc3RhdGljU2Vzb3Vy
Y2VTdGF0aXN0aWMsIFJlc291cmNlTG9hZFByZXZhbGVuY2U6OkhpZ2gpOwotICAgIGRvbWFpbnNU
b0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChtX2RlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UpOwor
ICAgIGRvbWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChkZWJ1Z1N0YXRpY1ByZXZhbGVudFJl
c291cmNlKCkpOwogCi0gICAgaWYgKCFtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGF1dG8mIG1hbnVhbFJlc291cmNlU3RhdGlzdGljID0gZW5zdXJl
UmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4obV9kZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKTsKKyAgICBpZiAoIWRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UoKS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byYgbWFudWFsUmVzb3VyY2VTdGF0aXN0aWMgPSBlbnN1
cmVSZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihkZWJ1Z01hbnVhbFByZXZh
bGVudFJlc291cmNlKCkpOwogICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZShtYW51YWxSZXNv
dXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6SGlnaCk7Ci0gICAgICAgIGRv
bWFpbnNUb0Jsb2NrLnVuY2hlY2tlZEFwcGVuZChtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3Vy
Y2UpOworICAgICAgICBkb21haW5zVG9CbG9jay51bmNoZWNrZWRBcHBlbmQoZGVidWdNYW51YWxQ
cmV2YWxlbnRSZXNvdXJjZSgpKTsKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAgICAgICAg
UkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJEaWQgc2V0ICV7
cHVibGljfXMgYXMgcHJldmFsZW50IHJlc291cmNlIGZvciB0aGUgcHVycG9zZXMgb2YgSVRQIERl
YnVnIE1vZGUuIiwgbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEZWJ1ZywgIkRpZCBzZXQgJXtwdWJsaWN9cyBhcyBwcmV2YWxlbnQgcmVzb3VyY2UgZm9yIHRo
ZSBwdXJwb3NlcyBvZiBJVFAgRGVidWcgTW9kZS4iLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKICAgICB9CiAgICAgCiAgICAg
cmV0dXJuIGRvbWFpbnNUb0Jsb2NrOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShib29sIGVuYWJs
ZSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAotICAgIGlmIChlbmFibGUpCi0gICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiVHVybmVkIElUUCBEZWJ1ZyBNb2RlIG9uLiIpOwot
I2VuZGlmCi0KLSAgICBtX2RlYnVnTW9kZUVuYWJsZWQgPSBlbmFibGU7Ci0gICAgbV9kZWJ1Z0xv
Z2dpbmdFbmFibGVkID0gZW5hYmxlOwotCi0gICAgZW5zdXJlUHJldmFsZW50UmVzb3VyY2VzRm9y
RGVidWdNb2RlKCk7Ci0gICAgLy8gVGhpcyB3aWxsIGxvZyB0aGUgY3VycmVudCBjb29raWUgYmxv
Y2tpbmcgc3RhdGUuCi0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgdXBkYXRlQ29va2llQmxvY2tp
bmcoW10oKSB7IH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6c2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIGRvbWFpbikKLXsKLSAgICBtX2RlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBkb21h
aW47Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzY2hlZHVs
ZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5n
UmVxdWVzdElkZW50aWZpZXIgPSArK21fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXI7Ci0gICAgbV93b3JrUXVldWUtPmRpc3BhdGNoQWZ0ZXIobWluaW11bVN0YXRpc3Rp
Y3NQcm9jZXNzaW5nSW50ZXJ2YWwsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlz
KSwgc3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9ICptX3BlbmRpbmdTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyXSB7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFtX3BlbmRpbmdTdGF0aXN0
aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyIHx8ICptX3BlbmRpbmdTdGF0aXN0aWNzUHJv
Y2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyICE9IHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXIpIHsKLSAgICAgICAgICAgIC8vIFRoaXMgcmVxdWVzdCBoYXMgYmVlbiBjYW5jZWxl
ZC4KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHVwZGF0ZUNvb2tp
ZUJsb2NraW5nKFtdKCkgeyB9KTsKLSAgICAgICAgcHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVj
b3JkcygpOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZTo6Y2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BlbmRpbmdTdGF0aXN0aWNzUHJv
Y2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gV1RGOjpudWxsb3B0OwotfQotCiB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6bG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0
b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNvdXJjZURvbWFpbiwgYm9v
bCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwpAQCAtNjM1LDcgKzM5Miw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgUmVnaXN0cmFibGVEb21hCiAg
ICAgICAgIHNjaGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsK
IH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291
cmNlTG9hZGluZyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBS
ZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGlu
Zyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgdGFyZ2V0RG9tYWluLCBjb25zdCBUb3BGcmFtZURv
bWFpbiYgdG9wRnJhbWVEb21haW4sIFdhbGxUaW1lIGxhc3RTZWVuKQogewogICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC02NDUsNyArNDAyLDcgQEAgdm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBSZWdp
c3RyYWJsZUQKICAgICAgICAgc2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5l
Y2Vzc2FyeSgpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc291cmNlRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWluKQordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmxvZ1N1YnJlc291cmNlUmVkaXJlY3QoY29uc3Qg
UmVkaXJlY3RlZEZyb21Eb21haW4mIHNvdXJjZURvbWFpbiwgY29uc3QgUmVkaXJlY3RlZFRvRG9t
YWluJiB0YXJnZXREb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAK
QEAgLTY1OCw3ICs0MTUsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZQogICAgICAgICBzY2hl
ZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CiB9CiAKLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mIGRv
bWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzI4LDcgKzQ4
NSw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuaXNQ
cmV2YWxlbnRSZXNvdXJjZSAmJiBtYXBFbnRyeS0+dmFsdWUuaXNWZXJ5UHJldmFsZW50UmVzb3Vy
Y2U7CiB9CiAKLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lz
dGVyZWRBc1N1YnJlc291cmNlVW5kZXIoY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291
cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pIGNvbnN0
Citib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFp
biwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluKSBjb25zdAogewogICAgIEFT
U0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC03MzYsNyArNDkzLDcgQEAgYm9vbCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VV
bmRlcihjb25zdCBSZWcKICAgICByZXR1cm4gbWFwRW50cnkgPT0gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuZW5kKCkgPyBmYWxzZSA6IG1hcEVudHJ5LT52YWx1ZS5zdWJyZXNvdXJjZVVuZGVyVG9w
RnJhbWVEb21haW5zLmNvbnRhaW5zKHRvcEZyYW1lRG9tYWluKTsKIH0KIAotYm9vbCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihj
b25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbikgY29uc3QKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIoY29uc3QgU3ViRnJhbWVE
b21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BGcmFtZURvbWFpbiYgdG9wRnJhbWVEb21h
aW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc0NCw3
ICs1MDEsNyBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdp
c3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdAogICAgIHJldHVybiBtYXBFbnRyeSA9
PSBtX3Jlc291cmNlU3RhdGlzdGljc01hcC5lbmQoKSA/IGZhbHNlIDogbWFwRW50cnktPnZhbHVl
LnN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnMuY29udGFpbnModG9wRnJhbWVEb21haW4pOwog
fQogCi1ib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6aXNSZWdpc3RlcmVk
QXNSZWRpcmVjdGluZ1RvKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiByZWRpcmVjdGVkRnJvbURv
bWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QK
K2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc1JlZ2lzdGVyZWRBc1Jl
ZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4mIHJlZGlyZWN0ZWRGcm9tRG9t
YWluLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mIHJlZGlyZWN0ZWRUb0RvbWFpbikgY29uc3QK
IHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtNzc3LDcgKzUzNCw3IEBA
IGJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjppc0dyYW5kZmF0aGVyZWQo
Y29uc3QgUmVnaXN0cmFibGVEb21haW4mCiAgICAgcmV0dXJuIG1hcEVudHJ5ID09IG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmVuZCgpID8gZmFsc2UgOiBtYXBFbnRyeS0+dmFsdWUuZ3JhbmRmYXRo
ZXJlZDsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3ViRnJh
bWVEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikKK3ZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mIHN1YkZyYW1lRG9tYWluLCBjb25zdCBUb3BG
cmFtZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7CiAKQEAgLTc4Nyw3ICs1NDQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFJlZwogICAg
IGVuc3VyZVJlc291cmNlU3RhdGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHRvcEZyYW1lRG9t
YWluKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgc3Vi
cmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbikK
K3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mIHN1YnJlc291cmNlRG9t
YWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4pCiB7CiAgICAgQVNT
RVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTc5Nyw3ICs1NTQsNyBAQCB2b2lkIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1l
RG9tYWluKGNvbnN0CiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVE
b21haW4odG9wRnJhbWVEb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJiBzdWJyZXNvdXJjZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJl
ZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYgc3Vi
cmVzb3VyY2VEb21haW4sIGNvbnN0IFJlZGlyZWN0RG9tYWluJiByZWRpcmVjdERvbWFpbikKIHsK
ICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIApAQCAtODA3LDcgKzU2NCw3IEBAIHZv
aWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1
ZVJlZGlyZWN0VG8oY29uc3QgUmVnCiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVn
aXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYgcmVkaXJlY3REb21haW4pCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3Vy
Y2VEb21haW4mIHN1YnJlc291cmNlRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJl
Y3REb21haW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgxNyw3
ICs1NzQsNyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0U3Vi
cmVzb3VyY2VVbmlxdWVSZWRpcmVjdEZyb20oY29uc3QgUgogICAgIGVuc3VyZVJlc291cmNlU3Rh
dGlzdGljc0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdG9wRnJhbWVEb21haW4sIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiByZWRpcmVjdERvbWFpbikKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVE
b21haW4mIHRvcEZyYW1lRG9tYWluLCBjb25zdCBSZWRpcmVjdERvbWFpbiYgcmVkaXJlY3REb21h
aW4pCiB7CiAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CiAKQEAgLTgyNyw3ICs1ODQs
NyBAQCB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VG9wRnJhbWVV
bmlxdWVSZWRpcmVjdFRvKGNvbnN0IFJlZ2lzdAogICAgIGVuc3VyZVJlc291cmNlU3RhdGlzdGlj
c0ZvclJlZ2lzdHJhYmxlRG9tYWluKHJlZGlyZWN0RG9tYWluKTsKIH0KIAotdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9t
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFi
bGVEb21haW4mIHJlZGlyZWN0RG9tYWluKQordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OnNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9t
YWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVkaXJlY3REb21haW4mIHJlZGlyZWN0RG9tYWlu
KQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwogCkBAIC04MzcsOTUgKzU5NCw2
IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRUb3BGcmFtZVVu
aXF1ZVJlZGlyZWN0RnJvbShjb25zdCBSZWdpCiAgICAgZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNz
Rm9yUmVnaXN0cmFibGVEb21haW4ocmVkaXJlY3REb21haW4pOwogfQogCi12b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihT
ZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAg
QVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNl
ckludGVyYWN0aW9uID0gc2Vjb25kczsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnNldE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNv
bmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNT
RVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5taW5pbXVtVGltZUJldHdl
ZW5EYXRhUmVjb3Jkc1JlbW92YWwgPSBzZWNvbmRzOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0R3JhbmRmYXRoZXJpbmdUaW1lKFNlY29uZHMgc2Vjb25k
cykKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQoc2Vjb25k
cyA+PSAwX3MpOwotCi0gICAgbV9wYXJhbWV0ZXJzLmdyYW5kZmF0aGVyaW5nVGltZSA9IHNlY29u
ZHM7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzZXRDYWNo
ZU1heEFnZUNhcChTZWNvbmRzIHNlY29uZHMpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0gICAgQVNTRVJUKHNlY29uZHMgPj0gMF9zKTsKLQotICAgIG1fcGFyYW1ldGVycy5j
YWNoZU1heEFnZUNhcFRpbWUgPSBzZWNvbmRzOwotICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7
Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRhdGVDYWNo
ZU1heEFnZUNhcCgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgCi0g
ICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIHNl
Y29uZHMgPSBtX3BhcmFtZXRlcnMuY2FjaGVNYXhBZ2VDYXBUaW1lXSAoKSB7Ci0gICAgICAgIHN0
b3JlLT5zZXRDYWNoZU1heEFnZUNhcChzZWNvbmRzLCBbXSB7IH0pOwotICAgIH0pOwotfQotCi12
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6c2V0QWdlQ2FwRm9yQ2xpZW50
U2lkZUNvb2tpZXMoU2Vjb25kcyBzZWNvbmRzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7Ci0gICAgCi0gICAgbV9wYXJhbWV0
ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSA9IHNlY29uZHM7Ci0gICAgdXBkYXRlQ2xp
ZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmU6OnVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2FwKCkKLXsKLSAgICBBU1NF
UlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FEX1NUQVRJ
U1RJQ1MpCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9z
dG9yZSksIHNlY29uZHMgPSBtX3BhcmFtZXRlcnMuY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXBUaW1l
XSAoKSB7Ci0gICAgICAgIGlmIChhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHN0b3JlLT5uZXR3b3Jr
U2Vzc2lvbigpKQotICAgICAgICAgICAgbmV0d29ya1Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vz
c2lvbigpLnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKHNlY29uZHMpOwotICAgIH0pOwot
I2VuZGlmCi19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBpZiAobV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgZm9yIChj
b25zdCBhdXRvJiBwbHVnaW4gOiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkucGx1
Z2luUHJvY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFtX2FjdGl2ZVBsdWdpblRva2Vucy5jb250
YWlucyhwbHVnaW4tPnBsdWdpblByb2Nlc3NUb2tlbigpKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuICFtX2xhc3RUaW1lRGF0YVJlY29yZHNX
ZXJlUmVtb3ZlZCB8fCBNb25vdG9uaWNUaW1lOjpub3coKSA+PSAobV9sYXN0VGltZURhdGFSZWNv
cmRzV2VyZVJlbW92ZWQgKyBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsKTsKLX0KLQotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6
OnNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wgdmFsdWUpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVkID0gdmFs
dWU7Ci0gICAgaWYgKG1fZGF0YVJlY29yZHNCZWluZ1JlbW92ZWQpCi0gICAgICAgIG1fbGFzdFRp
bWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci19Ci0KIFJl
c291cmNlTG9hZFN0YXRpc3RpY3MmIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6
ZW5zdXJlUmVzb3VyY2VTdGF0aXN0aWNzRm9yUmVnaXN0cmFibGVEb21haW4oY29uc3QgUmVnaXN0
cmFibGVEb21haW4mIGRvbWFpbikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
QEAgLTk0MSwxMyArNjA5LDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxLZXllZEVuY29kZXI+IFJlc291
cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y3JlYXRlRW5jb2RlckZyCiAKICAgICBhdXRv
IGVuY29kZXIgPSBLZXllZEVuY29kZXI6OmVuY29kZXIoKTsKICAgICBlbmNvZGVyLT5lbmNvZGVV
SW50MzIoInZlcnNpb24iLCBzdGF0aXN0aWNzTW9kZWxWZXJzaW9uKTsKLSAgICBlbmNvZGVyLT5l
bmNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBtX2VuZE9mR3JhbmRm
YXRoZXJpbmdUaW1lc3RhbXAuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKKyAgICBlbmNv
ZGVyLT5lbmNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAiLCBlbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wKCkuc2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKTsKIAog
ICAgIGVuY29kZXItPmVuY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGljcyIsIG1fcmVzb3Vy
Y2VTdGF0aXN0aWNzTWFwLmJlZ2luKCksIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLmVuZCgpLCBb
XShLZXllZEVuY29kZXImIGVuY29kZXJJbm5lciwgY29uc3QgYXV0byYgZG9tYWluKSB7CiAgICAg
ICAgIGRvbWFpbi52YWx1ZS5lbmNvZGUoZW5jb2RlcklubmVyKTsKICAgICB9KTsKIAotICAgIGVu
Y29kZXItPmVuY29kZU9iamVjdHMoIm9wZXJhdGluZ0RhdGVzIiwgbV9vcGVyYXRpbmdEYXRlcy5i
ZWdpbigpLCBtX29wZXJhdGluZ0RhdGVzLmVuZCgpLCBbXShLZXllZEVuY29kZXImIGVuY29kZXJJ
bm5lciwgT3BlcmF0aW5nRGF0ZSBkYXRlKSB7CisgICAgYXV0byYgb3BlcmF0aW5nRGF0ZXMgPSB0
aGlzLT5vcGVyYXRpbmdEYXRlcygpOworICAgIGVuY29kZXItPmVuY29kZU9iamVjdHMoIm9wZXJh
dGluZ0RhdGVzIiwgb3BlcmF0aW5nRGF0ZXMuYmVnaW4oKSwgb3BlcmF0aW5nRGF0ZXMuZW5kKCks
IFtdKEtleWVkRW5jb2RlciYgZW5jb2RlcklubmVyLCBPcGVyYXRpbmdEYXRlIGRhdGUpIHsKICAg
ICAgICAgZW5jb2RlcklubmVyLmVuY29kZURvdWJsZSgiZGF0ZSIsIGRhdGUuc2Vjb25kc1NpbmNl
RXBvY2goKS52YWx1ZSgpKTsKICAgICB9KTsKIApAQCAtOTY5LDkgKzYzOCw5IEBAIHZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVdpdGhEYXRhRnJvbURlY29kZXIo
S2V5ZWREZWNvZGVyJiBkCiAKICAgICBkb3VibGUgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFt
cDsKICAgICBpZiAoZGVjb2Rlci5kZWNvZGVEb3VibGUoImVuZE9mR3JhbmRmYXRoZXJpbmdUaW1l
c3RhbXAiLCBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKSkKLSAgICAgICAgbV9lbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wID0gV2FsbFRpbWU6OmZyb21SYXdTZWNvbmRzKGVuZE9mR3Jh
bmRmYXRoZXJpbmdUaW1lc3RhbXApOworICAgICAgICBzZXRFbmRPZkdyYW5kZmF0aGVyaW5nVGlt
ZXN0YW1wKFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0
YW1wKSk7CiAgICAgZWxzZQotICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PSB7IH07CisgICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwogCiAg
ICAgVmVjdG9yPFJlc291cmNlTG9hZFN0YXRpc3RpY3M+IGxvYWRlZFN0YXRpc3RpY3M7CiAgICAg
Ym9vbCBzdWNjZWVkZWQgPSBkZWNvZGVyLmRlY29kZU9iamVjdHMoImJyb3dzaW5nU3RhdGlzdGlj
cyIsIGxvYWRlZFN0YXRpc3RpY3MsIFt2ZXJzaW9uT25EaXNrXShLZXllZERlY29kZXImIGRlY29k
ZXJJbm5lciwgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgc3RhdGlzdGljcykgewpAQCAtOTk3LDcg
KzY2Niw3IEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjptZXJnZVdp
dGhEYXRhRnJvbURlY29kZXIoS2V5ZWREZWNvZGVyJiBkCiAgICAgaWYgKCFzdWNjZWVkZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fb3BlcmF0aW5nRGF0ZXMgPSBtZXJnZU9wZXJhdGluZ0Rh
dGVzKG1fb3BlcmF0aW5nRGF0ZXMsIFdURk1vdmUob3BlcmF0aW5nRGF0ZXMpKTsKKyAgICBtZXJn
ZU9wZXJhdGluZ0RhdGVzKFdURk1vdmUob3BlcmF0aW5nRGF0ZXMpKTsKIH0KIAogdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKQEAgLTEwMDUsNyArNjc0LDcgQEAgdm9pZCBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OmNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGUKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIG1f
cmVzb3VyY2VTdGF0aXN0aWNzTWFwLmNsZWFyKCk7Ci0gICAgbV9vcGVyYXRpbmdEYXRlcy5jbGVh
cigpOworICAgIGNsZWFyT3BlcmF0aW5nRGF0ZXMoKTsKIAogICAgIGF1dG8gY2FsbGJhY2tBZ2dy
ZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogCkBAIC0xMDU2LDM5ICs3MjUsNiBAQCBib29sIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NNZW1vcnlTdG9yZTo6aGFzVXNlckdyYW50ZWRTdG9yYWdlQWNjZXNzVGhyb3VnaFByb21wdAog
ICAgIHJldHVybiBzdGF0aXN0aWMuc3RvcmFnZUFjY2Vzc1VuZGVyVG9wRnJhbWVEb21haW5zLmNv
bnRhaW5zKGZpcnN0UGFydHlEb21haW4pOwogfQogCi1zdGF0aWMgdm9pZCBkZWJ1Z0xvZ0RvbWFp
bnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVE
b21haW4+JiBkb21haW5zKQotewotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAgIHN0YXRp
YyBjb25zdCBhdXRvIG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50ID0gNTA7Ci0g
ICAgaWYgKGRvbWFpbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZG9t
YWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21haW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKLSAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91
dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yOiAle3B1
YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3RyaW5nKGRvbWFpbnMpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURv
bWFpbj4gYmF0Y2g7Ci0gICAgYmF0Y2gucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJP
ZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7Ci0gICAgYXV0byBiYXRjaE51bWJlciA9IDE7Ci0g
ICAgdW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0gc3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9mRG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7
Ci0KLSAgICBmb3IgKGF1dG8mIGRvbWFpbiA6IGRvbWFpbnMpIHsKLSAgICAgICAgaWYgKGJhdGNo
LnNpemUoKSA9PSBtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCkgewotICAgICAg
ICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91
dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29udGV4dHMgZm9yICgle3B1
YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNoTnVtYmVyLCBudW1iZXJP
ZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBiYXRjaC5zaHJpbmsoMCk7Ci0gICAgICAgICAgICArK2JhdGNoTnVtYmVyOwotICAgICAg
ICB9Ci0gICAgICAgIGJhdGNoLmFwcGVuZChkb21haW4pOwotICAgIH0KLSAgICBpZiAoIWJhdGNo
LmlzRW1wdHkoKSkKLSAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhpcmQtcGFydHkgY29u
dGV4dHMgZm9yICgle3B1YmxpY31kIG9mICV1KTogJXtwdWJsaWN9cy4iLCBhY3Rpb24sIGJhdGNo
TnVtYmVyLCBudW1iZXJPZkJhdGNoZXMsIGRvbWFpbnNUb1N0cmluZyhiYXRjaCkudXRmOCgpLmRh
dGEoKSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShhY3Rpb24pOwotICAgIFVOVVNFRF9QQVJB
TShkb21haW5zKTsKLSNlbmRpZgotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6dXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpA
QCAtMTEwNCw1MiArNzQwLDIzIEBAIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0
b3JlOjp1cGRhdGVDb29raWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBpZiAobV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICYmICFkb21haW5z
VG9CbG9jay5pc0VtcHR5KCkpCisgICAgaWYgKGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSAmJiAhZG9t
YWluc1RvQmxvY2suaXNFbXB0eSgpKQogICAgICAgICBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMo
ImJsb2NrIiwgZG9tYWluc1RvQmxvY2spOwogCi0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNo
KFt3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKSwgc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewor
ICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhp
cyksIHN0b3JlID0gbWFrZVJlZihzdG9yZSgpKSwgZG9tYWluc1RvQmxvY2sgPSBjcm9zc1RocmVh
ZENvcHkoZG9tYWluc1RvQmxvY2spLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgc3RvcmUtPmNhbGxVcGRhdGVQcmV2
YWxlbnREb21haW5zVG9CbG9ja0Nvb2tpZXNGb3JIYW5kbGVyKGRvbWFpbnNUb0Jsb2NrLCBbd2Vh
a1RoaXMgPSBXVEZNb3ZlKHdlYWtUaGlzKSwgc3RvcmUgPSBzdG9yZS5jb3B5UmVmKCksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBzdG9yZS0+c3RhdGlzdGljc1F1ZXVlKCkuZGlzcGF0Y2goW3dlYWtUaGlzID0g
V1RGTW92ZSh3ZWFrVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
KTsKICAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgICAgICAgICAgICAgUkVMRUFT
RV9MT0dfSU5GT19JRih3ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGVidWcsICJEb25lIHVwZGF0aW5nIGNvb2tpZSBibG9ja2luZy4iKTsKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0xPR19JTkZPX0lGKHdlYWtUaGlzLT5kZWJ1Z0xvZ2dpbmdF
bmFibGVkKCksIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkRvbmUgdXBkYXRpbmcgY29v
a2llIGJsb2NraW5nLiIpOwogI2VuZGlmCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjp1cGRh
dGVDb29raWVCbG9ja2luZ0ZvckRvbWFpbnMoY29uc3QgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiYgZG9tYWluc1RvQmxvY2ssIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFJ1bkxv
b3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBkb21haW5zVG9C
bG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewotICAgICAgICBzdG9y
ZS0+Y2FsbFVwZGF0ZVByZXZhbGVudERvbWFpbnNUb0Jsb2NrQ29va2llc0ZvckhhbmRsZXIoZG9t
YWluc1RvQmxvY2ssIFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHN0
b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0pOwot
fQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6Y2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5z
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUp
LCBkb21haW5zID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnMpXSB7Ci0gICAgICAgIHN0b3JlLT5j
YWxsUmVtb3ZlRG9tYWluc0hhbmRsZXIoZG9tYWlucyk7Ci0gICAgfSk7Ci0KLSAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6cHJvY2Vzc1N0YXRpc3RpY3MoY29uc3QgRnVuY3Rpb248dm9pZChjb25zdCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzJik+JiBwcm9jZXNzRnVuY3Rpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CkBAIC0xMTc4LDExICs3ODUsMTEgQEAgVmVjdG9yPFJlZ2lzdHJh
YmxlRG9tYWluPiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnJlZ2lzdHJhYmxl
RG9tYWluc1QKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIGJvb2wg
c2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyA9IG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcCA+IFdhbGxUaW1lOjpub3coKTsKLSAgICBib29sIHNob3VsZENsZWFyR3JhbmRmYXRoZXJp
bmcgPSAhc2hvdWxkQ2hlY2tGb3JHcmFuZGZhdGhlcmluZyAmJiBtX2VuZE9mR3JhbmRmYXRoZXJp
bmdUaW1lc3RhbXA7CisgICAgYm9vbCBzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5nID0gZW5k
T2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCgpID4gV2FsbFRpbWU6Om5vdygpOworICAgIGJvb2wg
c2hvdWxkQ2xlYXJHcmFuZGZhdGhlcmluZyA9ICFzaG91bGRDaGVja0ZvckdyYW5kZmF0aGVyaW5n
ICYmIGVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAoKTsKIAogICAgIGlmIChzaG91bGRDbGVh
ckdyYW5kZmF0aGVyaW5nKQotICAgICAgICBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXAg
PSB7IH07CisgICAgICAgIGNsZWFyRW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVTdGFtcCgpOwogCiAg
ICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWluPiBwcmV2YWxlbnRSZXNvdXJjZXM7CiAgICAgZm9y
IChhdXRvJiBzdGF0aXN0aWMgOiBtX3Jlc291cmNlU3RhdGlzdGljc01hcC52YWx1ZXMoKSkgewpA
QCAtMTE5Niw2MiArODAzLDE2IEBAIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gUmVzb3VyY2VM
b2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RyYWJsZURvbWFpbnNUCiAgICAgcmV0dXJu
IHByZXZhbGVudFJlc291cmNlczsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVt
b3J5U3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5KCkKLXsKLSAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8gdG9kYXkgPSBPcGVyYXRp
bmdEYXRlOjp0b2RheSgpOwotICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0VtcHR5KCkgJiYg
dG9kYXkgPD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHdoaWxlIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRlc1dpbmRvdykK
LSAgICAgICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7Ci0KLSAgICBtX29wZXJhdGluZ0Rh
dGVzLmFwcGVuZCh0b2RheSk7Ci19Ci0KLWJvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChjb25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
JiByZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIGlmIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRl
c1dpbmRvdykgewotICAgICAgICBpZiAoT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKHJlc291
cmNlU3RhdGlzdGljLm1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1lKSA8IG1fb3BlcmF0aW5n
RGF0ZXMuZmlyc3QoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IElmIHdlIGRvbid0IG1lZXQgdGhlIHJlYWwgY3JpdGVyaWEgZm9yIGFuIGV4cGlyZWQgc3RhdGlz
dGljLCBjaGVjayB0aGUgdXNlciBzZXR0aW5nIGZvciBhIHRpZ2h0ZXIgcmVzdHJpY3Rpb24gKG1h
aW5seSBmb3IgdGVzdGluZykuCi0gICAgaWYgKG1fcGFyYW1ldGVycy50aW1lVG9MaXZlVXNlcklu
dGVyYWN0aW9uKSB7Ci0gICAgICAgIGlmIChXYWxsVGltZTo6bm93KCkgPiByZXNvdXJjZVN0YXRp
c3RpYy5tb3N0UmVjZW50VXNlckludGVyYWN0aW9uVGltZSArIG1fcGFyYW1ldGVycy50aW1lVG9M
aXZlVXNlckludGVyYWN0aW9uLnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c01lbW9yeVN0b3JlOjpzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5
Q291bnQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFt
ZXRlcnMubWF4U3RhdGlzdGljc0VudHJpZXMgPSBtYXhpbXVtRW50cnlDb3VudDsKLX0KLQotdm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNldFBydW5lRW50cmllc0Rvd25U
byhzaXplX3QgcHJ1bmVUYXJnZXRDb3VudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKLQotICAgIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG8gPSBwcnVuZVRhcmdl
dENvdW50OwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cHJ1
bmVTdGF0aXN0aWNzSWZOZWVkZWQoKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwogCi0gICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFwLnNpemUoKSA8PSBtX3BhcmFtZXRl
cnMubWF4U3RhdGlzdGljc0VudHJpZXMpCisgICAgaWYgKG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
LnNpemUoKSA8PSBwYXJhbWV0ZXJzKCkubWF4U3RhdGlzdGljc0VudHJpZXMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVChtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvIDw9IG1f
cGFyYW1ldGVycy5tYXhTdGF0aXN0aWNzRW50cmllcyk7CisgICAgQVNTRVJUKHBhcmFtZXRlcnMo
KS5wcnVuZUVudHJpZXNEb3duVG8gPD0gcGFyYW1ldGVycygpLm1heFN0YXRpc3RpY3NFbnRyaWVz
KTsKIAotICAgIHNpemVfdCBudW1iZXJPZkVudHJpZXNMZWZ0VG9QcnVuZSA9IG1fcmVzb3VyY2VT
dGF0aXN0aWNzTWFwLnNpemUoKSAtIG1fcGFyYW1ldGVycy5wcnVuZUVudHJpZXNEb3duVG87Cisg
ICAgc2l6ZV90IG51bWJlck9mRW50cmllc0xlZnRUb1BydW5lID0gbV9yZXNvdXJjZVN0YXRpc3Rp
Y3NNYXAuc2l6ZSgpIC0gcGFyYW1ldGVycygpLnBydW5lRW50cmllc0Rvd25UbzsKICAgICBBU1NF
UlQobnVtYmVyT2ZFbnRyaWVzTGVmdFRvUHJ1bmUpOwogCiAgICAgVmVjdG9yPFN0YXRpc3RpY3NM
YXN0U2Vlbj4gcmVzb3VyY2VzVG9QcnVuZVBlckltcG9ydGFuY2VbbWF4SW1wb3J0YW5jZSArIDFd
OwpAQCAtMTI2NCwyMiArODI1LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCkKICAgICBBU1NFUlQoIW51bWJlck9mRW50
cmllc0xlZnRUb1BydW5lKTsKIH0KIAotdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5
U3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBtX3BhcmFtZXRlcnMgPSB7IH07Ci19Ci0KLXZvaWQg
UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpsb2dUZXN0aW5nRXZlbnQoY29uc3Qg
U3RyaW5nJiBldmVudCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBldmVu
dCA9IGV2ZW50Lmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZl
bnQoZXZlbnQpOwotICAgIH0pOwotfQotCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZTo6c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgU2Vj
b25kcyBzZWNvbmRzKQogewogICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwpAQCAtMTMw
NCwyNyArODQ5LDYgQEAgdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU6OnNl
dFZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWIKICAgICBzZXRQcmV2YWxlbnRS
ZXNvdXJjZShyZXNvdXJjZVN0YXRpc3RpYywgUmVzb3VyY2VMb2FkUHJldmFsZW5jZTo6VmVyeUhp
Z2gpOwogfQogCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTo6cmVtb3Zl
QWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIHN0
b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNjZXNzKFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
LSAgICAgICAgICAgIHN0b3JlLT5zdGF0aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0pOwotICAgIH0pOwotfQotCi12b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgdXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOwotICAgIHVwZGF0
ZUNhY2hlTWF4QWdlQ2FwKCk7Ci0gICAgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NN
ZW1vcnlTdG9yZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZS5oCmluZGV4IGUzMTE3N2ExMmE5ODI4Nzdh
MDBlYjA2NDQ2MzE5YzMzYWNmMTliMzcuLmNhMWQ5MmFkZWNjMGM0ZDUwZTdlOWNkMzQyZDU2ZDE0
MWM1YTBmYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9y
eVN0b3JlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNywxNyArMjcsMTMgQEAKIAogI2lmIEVOQUJMRShSRVNPVVJDRV9MT0FE
X1NUQVRJU1RJQ1MpCiAKLSNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmll
ci5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUg
IldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KIAotI2lmIEhBVkUoQ09SRV9QUkVE
SUNUSU9OKQotI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2Eu
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBLZXllZERlY29kZXI7CiBj
bGFzcyBLZXllZEVuY29kZXI7CkBAIC00NiwzNSArNDIsMTkgQEAgc3RydWN0IFJlc291cmNlTG9h
ZFN0YXRpc3RpY3M7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBPcGVyYXRpbmdEYXRl
OwogY2xhc3MgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlOwogCiAvLyBU
aGlzIGlzIGFsd2F5cyBjb25zdHJ1Y3RlZCAvIHVzZWQgLyBkZXN0cm95ZWQgb24gdGhlIFdlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSdzIHN0YXRpc3RpY3MgcXVldWUuCi1jbGFzcyBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPiB7CitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUgZmluYWwgOiBwdWJsaWMgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlIHsKIHB1YmxpYzoKLSAgICB1c2luZyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljczsKLSAgICB1c2luZyBSZWdpc3RyYWJsZURvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFRvcEZyYW1lRG9tYWluID0g
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgU3ViRnJhbWVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBTdWJSZXNvdXJjZURvbWFpbiA9
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwotICAgIHVzaW5nIFJlZGlyZWN0RG9tYWluID0g
V2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgUmVkaXJlY3RlZEZyb21Eb21h
aW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBSZWRpcmVjdGVkVG9E
b21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBOYXZpZ2F0ZWRG
cm9tRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47Ci0gICAgdXNpbmcgTmF2aWdh
dGVkVG9Eb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1c2luZyBEb21h
aW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MgPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAg
ICB1c2luZyBPcGVuZXJEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKLSAgICB1
c2luZyBPcGVuZXJQYWdlSUQgPSB1aW50NjRfdDsKLSAgICB1c2luZyBQYWdlSUQgPSB1aW50NjRf
dDsKLSAgICB1c2luZyBGcmFtZUlEID0gdWludDY0X3Q7Ci0KICAgICBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzTWVtb3J5U3RvcmUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlJiwgV29ya1F1
ZXVlJik7Ci0gICAgflJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSgpOwogCiAgICAg
dm9pZCBzZXRQZXJzaXN0ZW50U3RvcmFnZShSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVu
dFN0b3JhZ2UmKTsKIAotICAgIHZvaWQgY2xlYXIoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlU3RhdGlzdGlj
c01hcC5pc0VtcHR5KCk7IH0KKyAgICB2b2lkIGNsZWFyKENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
KT4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBjb25zdCBIYXNoTWFwPFJlZ2lzdHJhYmxlRG9tYWluLCBXZWJDb3JlOjpSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzPiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VTdGF0aXN0aWNzTWFw
OyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6S2V5ZWRFbmNvZGVyPiBjcmVhdGVF
bmNvZGVyRnJvbURhdGEoKSBjb25zdDsKICAgICB2b2lkIG1lcmdlV2l0aERhdGFGcm9tRGVjb2Rl
cihXZWJDb3JlOjpLZXllZERlY29kZXImKTsKQEAgLTgyLDE0NyArNjIsODEgQEAgcHVibGljOgog
ICAgIHZvaWQgbWVyZ2VTdGF0aXN0aWNzKFZlY3RvcjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzPiYm
KTsKICAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzKGNvbnN0IEZ1bmN0aW9uPHZvaWQoY29uc3Qg
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpPiYpIGNvbnN0OwogCi0gICAgdm9pZCB1cGRhdGVDb29r
aWVCbG9ja2luZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgdXBkYXRl
Q29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4m
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2xlYXJCbG9ja2luZ1N0
YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKLQotICAgIHZvaWQgaW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdE
YXRlSWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHByb2Nlc3NTdGF0aXN0aWNzQW5kRGF0YVJlY29y
ZHMoKTsKLQotICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3NVbmRlck9wZW5lcihEb21haW5J
bk5lZWRPZlN0b3JhZ2VBY2Nlc3MmJiwgT3BlbmVyUGFnZUlELCBPcGVuZXJEb21haW4mJik7Ci0g
ICAgdm9pZCByZW1vdmVBbGxTdG9yYWdlQWNjZXNzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
Jik7Ci0KLSAgICB2b2lkIGdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwotICAgIHZvaWQgY2FuY2VsUGVuZGluZ1N0YXRpc3RpY3NQcm9j
ZXNzaW5nUmVxdWVzdCgpOworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tpbmcoQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKSBvdmVycmlkZTsKIAotICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNT
dWJyZXNvdXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVE
b21haW4mKSBjb25zdDsKLSAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRlcihjb25z
dCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3Q7Ci0gICAgYm9v
bCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVkaXJlY3RlZEZyb21Eb21haW4m
LCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdDsKKyAgICB2b2lkIGNsYXNzaWZ5UHJl
dmFsZW50UmVzb3VyY2VzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUlmTmVlZGVk
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgb3ZlcnJpZGU7
CiAKLSAgICB2b2lkIGNsZWFyUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mKTsKLSAgICBTdHJpbmcgZHVtcFJlc291cmNlTG9hZFN0YXRpc3RpY3MoKSBjb25zdDsKLSAg
ICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25z
dDsKLSAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpOwotICAgIHZvaWQgc2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRG9tYWluJik7CisgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2Vzc1VuZGVyT3Bl
bmVyKERvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyYmLCBPcGVuZXJQYWdlSUQsIE9wZW5lckRv
bWFpbiYmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpOwotICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29uc3Q7CisgICAgdm9pZCBncmFuZGZhdGhlckRhdGFG
b3JEb21haW5zKGNvbnN0IEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+Jikgb3ZlcnJpZGU7CiAK
LSAgICB2b2lkIHNldFN1YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJGcmFtZURv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7Ci0gICAgdm9pZCBzZXRTdWJyZXNvdXJjZVVu
ZGVyVG9wRnJhbWVEb21haW4oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFt
ZURvbWFpbiYpOwotICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwg
Y29uc3QgUmVkaXJlY3REb21haW4mKTsKLSAgICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJl
Y3RUbyhjb25zdCBUb3BGcmFtZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJik7Ci0gICAg
dm9pZCBzZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBUb3BGcmFtZURvbWFpbiYs
IGNvbnN0IFJlZGlyZWN0RG9tYWluJik7CisgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YnJlc291
cmNlVW5kZXIoY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBSZWRpcmVjdGVk
RnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBjbGVh
clByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7Cisg
ICAgU3RyaW5nIGR1bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc1ByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdp
c3RyYWJsZURvbWFpbiYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgc2V0UHJldmFsZW50UmVz
b3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHNldFZl
cnlQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIG92ZXJyaWRlOwog
Ci0gICAgdm9pZCBzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291
bnQpOwotICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENv
dW50KTsKLSAgICB2b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgIHZv
aWQgc2V0R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUp
IG92ZXJyaWRlOworICAgIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNhbGN1bGF0ZUFuZFN1Ym1pdFRlbGVt
ZXRyeSgpIGNvbnN0OworICAgIHZvaWQgc2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKGNv
bnN0IFN1YkZyYW1lRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRT
dWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25z
dCBSZWRpcmVjdERvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U3VicmVzb3VyY2VVbmlx
dWVSZWRpcmVjdEZyb20oY29uc3QgU3ViUmVzb3VyY2VEb21haW4mLCBjb25zdCBSZWRpcmVjdERv
bWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNv
bnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHNldFRvcEZyYW1lVW5pcXVlUmVkaXJlY3RGcm9tKGNvbnN0IFRvcEZyYW1lRG9tYWlu
JiwgY29uc3QgUmVkaXJlY3REb21haW4mKSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0Tm90aWZ5
UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZChib29sKTsKLSAgICB2b2lkIHNldFNob3Vs
ZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKGJvb2wpOwotICAgIHZv
aWQgc2V0U2hvdWxkU3VibWl0VGVsZW1ldHJ5KGJvb2wpOwotICAgIHZvaWQgc2V0VGltZVRvTGl2
ZVVzZXJJbnRlcmFjdGlvbihTZWNvbmRzKTsKLSAgICB2b2lkIHNldE1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbChTZWNvbmRzKTsKLSAgICB2b2lkIHNldEdyYW5kZmF0aGVyaW5n
VGltZShTZWNvbmRzKTsKLSAgICB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01v
ZGUoYm9vbCk7Ci0gICAgYm9vbCBpc0RlYnVnTW9kZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X2RlYnVnTW9kZUVuYWJsZWQ7IH07Ci0gICAgdm9pZCBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRl
YnVnTW9kZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOworICAgIHZvaWQgY2FsY3VsYXRlQW5k
U3VibWl0VGVsZW1ldHJ5KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGhhc1N0b3JhZ2VB
Y2Nlc3MoY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYsIE9wdGlv
bmFsPEZyYW1lSUQ+LCBQYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOwot
ICAgIHZvaWQgcmVxdWVzdFN0b3JhZ2VBY2Nlc3MoU3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVE
b21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHByb21wdEVuYWJsZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU3RvcmFnZUFjY2Vzc1N0YXR1cyk+JiYpOwotICAgIHZvaWQgZ3JhbnRTdG9y
YWdlQWNjZXNzKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9tYWluJiYsIEZyYW1lSUQsIFBh
Z2VJRCwgYm9vbCB1c2VyV2FzUHJvbXB0ZWROb3csIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpOworICAgIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYs
IGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCByZXF1ZXN0U3Rv
cmFnZUFjY2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQ
YWdlSUQsIGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdl
QWNjZXNzU3RhdHVzKT4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3Mo
U3ViRnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29s
IHVzZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0Rv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYs
IGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSk7Ci0gICAgdm9pZCBsb2dVc2VySW50
ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKTsKLSAgICB2b2lkIGxvZ1N1YnJlc291cmNl
TG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwg
V2FsbFRpbWUgbGFzdFNlZW4pOwotICAgIHZvaWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25z
dCBSZWRpcmVjdGVkRnJvbURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpOworICAg
IHZvaWQgbG9nRnJhbWVOYXZpZ2F0aW9uKGNvbnN0IE5hdmlnYXRlZFRvRG9tYWluJiwgY29uc3Qg
VG9wRnJhbWVEb21haW4mLCBjb25zdCBOYXZpZ2F0ZWRGcm9tRG9tYWluJiwgYm9vbCBpc1JlZGly
ZWN0LCBib29sIGlzTWFpbkZyYW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIGxvZ1VzZXJJbnRlcmFj
dGlvbihjb25zdCBUb3BGcmFtZURvbWFpbiYpIG92ZXJyaWRlOworICAgIHZvaWQgbG9nU3VicmVz
b3VyY2VMb2FkaW5nKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21h
aW4mLCBXYWxsVGltZSBsYXN0U2Vlbikgb3ZlcnJpZGU7CisgICAgdm9pZCBsb2dTdWJyZXNvdXJj
ZVJlZGlyZWN0KGNvbnN0IFJlZGlyZWN0ZWRGcm9tRG9tYWluJiwgY29uc3QgUmVkaXJlY3RlZFRv
RG9tYWluJikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJik7Ci0gICAgYm9vbCBoYXNIYWRVc2VySW50ZXJhY3Rpb24oY29u
c3QgUmVnaXN0cmFibGVEb21haW4mKTsKKyAgICB2b2lkIGNsZWFyVXNlckludGVyYWN0aW9uKGNv
bnN0IFJlZ2lzdHJhYmxlRG9tYWluJikgb3ZlcnJpZGU7CisgICAgYm9vbCBoYXNIYWRVc2VySW50
ZXJhY3Rpb24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBvdmVycmlkZTsKIAotICAgIHZvaWQg
c2V0TGFzdFNlZW4oY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBTZWNvbmRzKTsKLQotICAgIHZv
aWQgZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKTsKLQotICAgIGNvbnN0IFdlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSBjb25zdCB7IHJldHVybiBtX3N0b3JlOyB9CisgICAg
dm9pZCBzZXRMYXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIFNlY29uZHMpIG92ZXJy
aWRlOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHNob3VsZEJsb2NrQW5kS2VlcENvb2tp
ZXMoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYpOwogICAgIHN0YXRpYyBib29sIHNob3Vs
ZEJsb2NrQW5kUHVyZ2VDb29raWVzKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKTsKICAg
ICBzdGF0aWMgYm9vbCBoYXNVc2VyR3JhbnRlZFN0b3JhZ2VBY2Nlc3NUaHJvdWdoUHJvbXB0KGNv
bnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpOwog
ICAgIGJvb2wgaGFzSGFkVW5leHBpcmVkUmVjZW50VXNlckludGVyYWN0aW9uKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MmKSBjb25zdDsKLSAgICBib29sIGhhc1N0YXRpc3RpY3NFeHBpcmVkKGNvbnN0
IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmKSBjb25zdDsKICAgICBib29sIHdhc0FjY2Vzc2VkQXNG
aXJzdFBhcnR5RHVlVG9Vc2VySW50ZXJhY3Rpb24oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cyYgY3VycmVudCwgY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgdXBkYXRlZCkgY29uc3Q7
CisgICAgdm9pZCBpbmNyZW1lbnRSZWNvcmRzRGVsZXRlZENvdW50Rm9yRG9tYWlucyhIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYmKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFByZXZhbGVudFJl
c291cmNlKFJlc291cmNlTG9hZFN0YXRpc3RpY3MmLCBSZXNvdXJjZUxvYWRQcmV2YWxlbmNlKTsK
ICAgICB1bnNpZ25lZCByZWN1cnNpdmVseUdldEFsbERvbWFpbnNUaGF0SGF2ZVJlZGlyZWN0ZWRU
b1RoaXNEb21haW4oY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyYsIEhhc2hTZXQ8UmVkaXJl
Y3RlZFRvRG9tYWluPiYsIHVuc2lnbmVkIG51bWJlck9mUmVjdXJzaXZlQ2FsbHMpIGNvbnN0Owot
ICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBt
X3N0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZCAgPSBlbmFibGVkOyB9Ci0gICAgYm9vbCBzaG91
bGRSZW1vdmVEYXRhUmVjb3JkcygpIGNvbnN0OwotICAgIHZvaWQgc2V0RGVidWdMb2dnZ2luZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fZGVidWdMb2dnaW5nRW5hYmxlZCAgPSBlbmFibGVkOyB9
Ci0gICAgdm9pZCBzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sKTsKLSAgICB2b2lkIHNj
aGVkdWxlU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWZOZWNlc3NhcnkoKTsKICAgICB2b2lk
IGdyYW50U3RvcmFnZUFjY2Vzc0ludGVybmFsKFN1YkZyYW1lRG9tYWluJiYsIFRvcEZyYW1lRG9t
YWluJiYsIE9wdGlvbmFsPEZyYW1lSUQ+LCBQYWdlSUQsIGJvb2wgdXNlcldhc1Byb21wdGVkTm93
T3JFYXJsaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKTsKICAgICB2b2lkIG1h
cmtBc1ByZXZhbGVudElmSGFzUmVkaXJlY3RlZFRvUHJldmFsZW50KFJlc291cmNlTG9hZFN0YXRp
c3RpY3MmKTsKICAgICBib29sIGlzUHJldmFsZW50RHVlVG9EZWJ1Z01vZGUoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyYpOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFs
ZW50UmVzb3VyY2VzRm9yRGVidWdNb2RlKCk7CisgICAgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiBlbnN1cmVQcmV2YWxlbnRSZXNvdXJjZXNGb3JEZWJ1Z01vZGUoKSBvdmVycmlkZTsKICAgICB2
b2lkIHJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Ci0gICAg
dm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpOworICAgIHZvaWQgcHJ1bmVTdGF0aXN0aWNz
SWZOZWVkZWQoKSBvdmVycmlkZTsKICAgICBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiBlbnN1cmVS
ZXNvdXJjZVN0YXRpc3RpY3NGb3JSZWdpc3RyYWJsZURvbWFpbihjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYpOwotICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gcmVnaXN0cmFibGVEb21haW5z
VG9SZW1vdmVXZWJzaXRlRGF0YUZvcigpOwotICAgIHZvaWQgc2V0Q2FjaGVNYXhBZ2VDYXAoU2Vj
b25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOwotICAgIHZvaWQgc2V0QWdl
Q2FwRm9yQ2xpZW50U2lkZUNvb2tpZXMoU2Vjb25kcyk7Ci0gICAgdm9pZCB1cGRhdGVDbGllbnRT
aWRlQ29va2llc0FnZUNhcCgpOwotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgdm9pZCByZWdp
c3RlclVzZXJEZWZhdWx0c0lmTmVlZGVkKCk7Ci0jZW5kaWYKKyAgICBWZWN0b3I8UmVnaXN0cmFi
bGVEb21haW4+IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKSBvdmVy
cmlkZTsKKyAgICBib29sIGlzTWVtb3J5U3RvcmUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisKIAotICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKLSAgICAgICAgc2l6ZV90IHBydW5lRW50
cmllc0Rvd25UbyB7IDgwMCB9OwotICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0VudHJpZXMg
eyAxMDAwIH07Ci0gICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2VySW50ZXJh
Y3Rpb247Ci0gICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1v
dmFsIHsgMV9oIH07Ci0gICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsgMjRfaCAq
IDcgfTsKLSAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICogNyB9Owot
ICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2ggKiA3IH07
Ci0gICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5l
ZCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVE
YXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07Ci0gICAgICAgIGJvb2wgc2hvdWxkU3VibWl0VGVs
ZW1ldHJ5IHsgdHJ1ZSB9OwotICAgIH07Ci0KLSAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmIG1fc3RvcmU7Ci0gICAgUmVmPFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAgICAgV2Vh
a1B0cjxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+IG1fcGVyc2lzdGVu
dFN0b3JhZ2U7CiAgICAgSGFzaE1hcDxSZWdpc3RyYWJsZURvbWFpbiwgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcz4gbV9yZXNvdXJjZVN0YXRpc3RpY3NNYXA7Ci0jaWYgSEFWRShDT1JFX1BSRURJQ1RJ
T04pCi0gICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYSBtX3Jlc291cmNl
TG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOwotI2Vsc2UKLSAgICBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzQ2xhc3NpZmllciBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyOwotI2VuZGlm
Ci0jaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgSGFzaFNldDx1aW50NjRfdD4g
bV9hY3RpdmVQbHVnaW5Ub2tlbnM7Ci0jZW5kaWYKLSAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVy
czsKLSAgICBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gbV9vcGVyYXRpbmdEYXRlczsKLSAgICBXYWxs
VGltZSBtX2VuZE9mR3JhbmRmYXRoZXJpbmdUaW1lc3RhbXA7Ci0gICAgYm9vbCBtX2RlYnVnTG9n
Z2luZ0VuYWJsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kZWJ1Z01vZGVFbmFibGVkIHsgZmFs
c2UgfTsKLSAgICBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnU3RhdGljUHJldmFsZW50
UmVzb3VyY2UgeyBVUkwgeyBVUkwoKSwgImh0dHBzOi8vM3JkcGFydHl0ZXN0d2Via2l0Lm9yZyJf
cyB9IH07Ci0gICAgUmVnaXN0cmFibGVEb21haW4gbV9kZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlOwotICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNlIH07Ci0gICAgTW9ub3Rv
bmljVGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZDsKLQotICAgIHVpbnQ2NF90
IG1fbGFzdFN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZpZXIgeyAwIH07Ci0gICAg
T3B0aW9uYWw8dWludDY0X3Q+IG1fcGVuZGluZ1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElk
ZW50aWZpZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJLaXQ6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZSkK
KyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUmIHN0b3JlKSB7IHJldHVybiBzdG9yZS5pc01lbW9yeVN0b3JlKCk7IH0KK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmOTIzMjQ1NWY2NWVjODY4ODQzN2Fj
MTc4MzJiODBiZDBiZjczNGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAt
MCwwICsxLDU3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKKworI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29y
a1Nlc3Npb24uaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgorI2luY2x1ZGUg
IlBsdWdpblByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQ
ZXJzaXN0ZW50U3RvcmFnZS5oIgorI2luY2x1ZGUgIlN0b3JhZ2VBY2Nlc3NTdGF0dXMuaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVsZW1ldHJ5LmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvS2V5ZWRDb2RpbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9y
YWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5o
PgorI2luY2x1ZGUgPHd0Zi9DYWxsYmFja0FnZ3JlZ2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvRGF0
ZU1hdGguaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworY29uc3RleHByIFNlY29uZHMgbWluaW11bVN0YXRpc3RpY3NQcm9jZXNzaW5n
SW50ZXJ2YWwgeyA1X3MgfTsKK2NvbnN0ZXhwciB1bnNpZ25lZCBvcGVyYXRpbmdEYXRlc1dpbmRv
dyB7IDMwIH07CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK3N0YXRpYyBTdHJpbmcgZG9t
YWluc1RvU3RyaW5nKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7
CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGZvciAoYXV0byYgZG9tYWluIDogZG9t
YWlucykgeworICAgICAgICBpZiAoIWJ1aWxkZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChkb21haW4u
c3RyaW5nKCkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorI2Vu
ZGlmCisKK09wZXJhdGluZ0RhdGUgT3BlcmF0aW5nRGF0ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1l
IHRpbWUpCit7CisgICAgZG91YmxlIG1zID0gdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLm1pbGxp
c2Vjb25kcygpOworICAgIGludCB5ZWFyID0gbXNUb1llYXIobXMpOworICAgIGludCB5ZWFyRGF5
ID0gZGF5SW5ZZWFyKG1zLCB5ZWFyKTsKKyAgICBpbnQgbW9udGggPSBtb250aEZyb21EYXlJblll
YXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7CisgICAgaW50IG1vbnRoRGF5ID0gZGF5SW5N
b250aEZyb21EYXlJblllYXIoeWVhckRheSwgaXNMZWFwWWVhcih5ZWFyKSk7CisKKyAgICByZXR1
cm4gT3BlcmF0aW5nRGF0ZSB7IHllYXIsIG1vbnRoLCBtb250aERheSB9OworfQorCitPcGVyYXRp
bmdEYXRlIE9wZXJhdGluZ0RhdGU6OnRvZGF5KCkKK3sKKyAgICByZXR1cm4gT3BlcmF0aW5nRGF0
ZTo6ZnJvbVdhbGxUaW1lKFdhbGxUaW1lOjpub3coKSk7Cit9CisKK1NlY29uZHMgT3BlcmF0aW5n
RGF0ZTo6c2Vjb25kc1NpbmNlRXBvY2goKSBjb25zdAoreworICAgIHJldHVybiBTZWNvbmRzIHsg
ZGF0ZVRvRGF5c0Zyb20xOTcwKG1feWVhciwgbV9tb250aCwgbV9tb250aERheSkgKiBzZWNvbmRz
UGVyRGF5IH07Cit9CisKK2Jvb2wgT3BlcmF0aW5nRGF0ZTo6b3BlcmF0b3I9PShjb25zdCBPcGVy
YXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tb250aERheSA9PSBvdGhl
ci5tX21vbnRoRGF5ICYmIG1fbW9udGggPT0gb3RoZXIubV9tb250aCAmJiBtX3llYXIgPT0gb3Ro
ZXIubV95ZWFyOworfQorCitib29sIE9wZXJhdGluZ0RhdGU6Om9wZXJhdG9yPChjb25zdCBPcGVy
YXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2go
KSA8IG90aGVyLnNlY29uZHNTaW5jZUVwb2NoKCk7Cit9CisKK2Jvb2wgT3BlcmF0aW5nRGF0ZTo6
b3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gc2Vjb25kc1NpbmNlRXBvY2goKSA8PSBvdGhlci5zZWNvbmRzU2luY2VFcG9jaCgpOworfQor
CitSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmIHN0b3JlLCBXb3JrUXVldWUmIHdvcmtR
dWV1ZSkKKyAgICA6IG1fc3RvcmUoc3RvcmUpCisgICAgLCBtX3dvcmtRdWV1ZSh3b3JrUXVldWUp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpbmNsdWRlVG9kYXlB
c09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworfQorCitSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6On5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKQoreworICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOworfQorCit1bnNpZ25lZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OmNvbXB1dGVJbXBvcnRhbmNlKGNvbnN0IFJlc291cmNlTG9hZFN0YXRpc3RpY3MmIHJlc291
cmNlU3RhdGlzdGljKQoreworICAgIHVuc2lnbmVkIGltcG9ydGFuY2UgPSBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6Om1heEltcG9ydGFuY2U7CisgICAgaWYgKCFyZXNvdXJjZVN0YXRpc3Rp
Yy5pc1ByZXZhbGVudFJlc291cmNlKQorICAgICAgICBpbXBvcnRhbmNlIC09IDE7CisgICAgaWYg
KCFyZXNvdXJjZVN0YXRpc3RpYy5oYWRVc2VySW50ZXJhY3Rpb24pCisgICAgICAgIGltcG9ydGFu
Y2UgLT0gMjsKKyAgICByZXR1cm4gaW1wb3J0YW5jZTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQo
Ym9vbCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3Bh
cmFtZXRlcnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IHZh
bHVlOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBtX3BhcmFtZXRlcnMuc2hvdWxkQ2xh
c3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgPSB2YWx1ZTsKK30KKwordm9p
ZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeShi
b29sIHZhbHVlKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIG1fcGFy
YW1ldGVycy5zaG91bGRTdWJtaXRUZWxlbWV0cnkgPSB2YWx1ZTsKK30KKwordm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlbW92ZURhdGFSZWNvcmRzKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KworICAgIGlmICghc2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSkgeworICAgICAgICBjYWxsYmFj
aygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCisgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuY2xlYXIoKTsKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHBsdWdpbiA6IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Q
cm9jZXNzZXMoKSkKKyAgICAgICAgbV9hY3RpdmVQbHVnaW5Ub2tlbnMuYWRkKHBsdWdpbi0+cGx1
Z2luUHJvY2Vzc1Rva2VuKCkpOworI2VuZGlmCisKKyAgICBhdXRvIHByZXZhbGVudFJlc291cmNl
RG9tYWlucyA9IHJlZ2lzdHJhYmxlRG9tYWluc1RvUmVtb3ZlV2Vic2l0ZURhdGFGb3IoKTsKKyAg
ICBpZiAocHJldmFsZW50UmVzb3VyY2VEb21haW5zLmlzRW1wdHkoKSkgeworICAgICAgICBjYWxs
YmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgUkVMRUFTRV9MT0dfSU5GT19JRihtX2RlYnVnTG9nZ2luZ0VuYWJsZWQsIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEZWJ1ZywgIkFib3V0IHRvIHJlbW92ZSBkYXRhIHJlY29yZHMgZm9y
ICV7cHVibGljfXMuIiwgZG9tYWluc1RvU3RyaW5nKHByZXZhbGVudFJlc291cmNlRG9tYWlucyku
dXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKworICAgIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVk
KHRydWUpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtwcmV2YWxlbnRSZXNvdXJj
ZURvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkocHJldmFsZW50UmVzb3VyY2VEb21haW5zKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyks
IHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQgPSBtX3BhcmFtZXRl
cnMuc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgd29ya1F1ZXVl
ID0gbV93b3JrUXVldWUuY29weVJlZigpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCF3ZWFr
VGhpcykgeworICAgICAgICAgICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIHdlYWtUaGlzLT5tX3N0b3JlLmRlbGV0ZVdlYnNpdGVEYXRhRm9y
UmVnaXN0cmFibGVEb21haW5zSW5BbGxQZXJzaXN0ZW50RGF0YVN0b3JlcyhXZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6Om1vbml0b3JlZERhdGFUeXBlcygpLCBXVEZNb3ZlKHByZXZhbGVu
dFJlc291cmNlRG9tYWlucyksIHNob3VsZE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNj
YW5uZWQsIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUo
d2Vha1RoaXMpLCB3b3JrUXVldWUgPSB3b3JrUXVldWUuY29weVJlZigpXShjb25zdCBIYXNoU2V0
PFJlZ2lzdHJhYmxlRG9tYWluPiYgZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURhdGEpIG11dGFi
bGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbZG9tYWluc1dpdGhEZWxldGVk
V2Vic2l0ZURhdGEgPSBjcm9zc1RocmVhZENvcHkoZG9tYWluc1dpdGhEZWxldGVkV2Vic2l0ZURh
dGEpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB3ZWFrVGhpcyA9IFdURk1vdmUod2Vh
a1RoaXMpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdlYWtUaGlzKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmluY3JlbWVu
dFJlY29yZHNEZWxldGVkQ291bnRGb3JEb21haW5zKFdURk1vdmUoZG9tYWluc1dpdGhEZWxldGVk
V2Vic2l0ZURhdGEpKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+c2V0RGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7CisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0dfSU5GT19JRih3
ZWFrVGhpcy0+bV9kZWJ1Z0xvZ2dpbmdFbmFibGVkLCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWcsICJEb25lIHJlbW92aW5nIGRhdGEgcmVjb3Jkcy4iKTsKKyNlbmRpZgorICAgICAgICAgICAg
fSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpCit7CisgICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBpZiAobV9wYXJhbWV0ZXJzLnNob3VsZENsYXNz
aWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJlY29yZHNSZW1vdmFsKQorICAgICAgICBjbGFzc2lmeVBy
ZXZhbGVudFJlc291cmNlcygpOworICAgIAorICAgIHJlbW92ZURhdGFSZWNvcmRzKFt0aGlzLCB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHBydW5lU3RhdGlzdGljc0lmTmVlZGVkKCk7CisgICAgICAg
IHN5bmNTdG9yYWdlSWZOZWVkZWQoKTsKKworICAgICAgICBpZiAoIW1fcGFyYW1ldGVycy5zaG91
bGROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpcywgd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKV0geworICAgICAgICAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFp
bigpKTsKKyAgICAgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBtX3N0b3JlLm5vdGlmeVJlc291cmNlTG9hZFN0YXRpc3RpY3NQcm9j
ZXNzZWQoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFt3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgc2hvdWxkTm90aWZ5UGFn
ZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCA9IG1fcGFyYW1ldGVycy5zaG91bGROb3RpZnlQ
YWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkLCB3b3JrUXVldWUgPSBtX3dvcmtRdWV1ZS5j
b3B5UmVmKCksIHN0b3JlID0gbWFrZVJlZihtX3N0b3JlKV0gKCkgbXV0YWJsZSB7CisgICAgICAg
IHN0b3JlLT5yZWdpc3RyYWJsZURvbWFpbnNXaXRoV2Vic2l0ZURhdGEoV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjptb25pdG9yZWREYXRhVHlwZXMoKSwgc2hvdWxkTm90aWZ5UGFnZXNX
aGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCwgW3dlYWtUaGlzID0gV1RGTW92ZSh3ZWFrVGhpcyks
IGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHdvcmtRdWV1ZSA9IHdvcmtRdWV1ZS5jb3B5
UmVmKCldIChIYXNoU2V0PFJlZ2lzdHJhYmxlRG9tYWluPiYmIGRvbWFpbnNXaXRoV2Vic2l0ZURh
dGEpIG11dGFibGUgeworICAgICAgICAgICAgd29ya1F1ZXVlLT5kaXNwYXRjaChbd2Vha1RoaXMg
PSBXVEZNb3ZlKHdlYWtUaGlzKSwgZG9tYWluc1dpdGhXZWJzaXRlRGF0YSA9IGNyb3NzVGhyZWFk
Q29weShkb21haW5zV2l0aFdlYnNpdGVEYXRhKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0gKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgaWYgKCF3ZWFrVGhpcykgeworICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmdyYW5kZmF0aGVy
RGF0YUZvckRvbWFpbnMoZG9tYWluc1dpdGhXZWJzaXRlRGF0YSk7CisgICAgICAgICAgICAgICAg
d2Vha1RoaXMtPm1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IFdhbGxUaW1lOjpub3co
KSArIHdlYWtUaGlzLT5tX3BhcmFtZXRlcnMuZ3JhbmRmYXRoZXJpbmdUaW1lOworICAgICAgICAg
ICAgICAgIHdlYWtUaGlzLT5zeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCk7CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2soKTsKKyAgICAgICAgICAgICAgICB3ZWFrVGhpcy0+bG9nVGVzdGluZ0V2ZW50
KCJHcmFuZGZhdGhlcmVkIl9zKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9
KTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCBlbmFibGUpCit7CisgICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBpZiAoZW5hYmxl
KQorICAgICAgICBSRUxFQVNFX0xPR19JTkZPKFJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Zywg
IlR1cm5lZCBJVFAgRGVidWcgTW9kZSBvbi4iKTsKKyNlbmRpZgorCisgICAgbV9kZWJ1Z01vZGVF
bmFibGVkID0gZW5hYmxlOworICAgIG1fZGVidWdMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZTsKKwor
ICAgIGVuc3VyZVByZXZhbGVudFJlc291cmNlc0ZvckRlYnVnTW9kZSgpOworICAgIC8vIFRoaXMg
d2lsbCBsb2cgdGhlIGN1cnJlbnQgY29va2llIGJsb2NraW5nIHN0YXRlLgorICAgIGlmIChlbmFi
bGUpCisgICAgICAgIHVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKK30KKwordm9pZCBS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFByZXZhbGVudFJlc291cmNlRm9yRGVidWdN
b2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkb21haW4pCit7CisgICAgbV9kZWJ1Z01hbnVh
bFByZXZhbGVudFJlc291cmNlID0gZG9tYWluOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZk5lY2Vzc2Fy
eSgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBtX3BlbmRpbmdT
dGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyID0gKyttX2xhc3RTdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworICAgIG1fd29ya1F1ZXVlLT5kaXNwYXRjaEFm
dGVyKG1pbmltdW1TdGF0aXN0aWNzUHJvY2Vzc2luZ0ludGVydmFsLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cigqdGhpcyksIHN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElkZW50aWZp
ZXIgPSAqbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllcl0gewor
ICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICghbV9wZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciB8fCAqbV9w
ZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciAhPSBzdGF0aXN0aWNz
UHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIHJlcXVl
c3QgaGFzIGJlZW4gY2FuY2VsZWQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICB1cGRhdGVDb29raWVCbG9ja2luZyhbXSgpIHsgfSk7CisgICAgICAgIHByb2Nlc3NT
dGF0aXN0aWNzQW5kRGF0YVJlY29yZHMoKTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmNhbmNlbFBlbmRpbmdTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3QoKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wZW5kaW5n
U3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0SWRlbnRpZmllciA9IFdURjo6bnVsbG9wdDsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24oU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOworICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMudGlt
ZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiA9IHNlY29uZHM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXRNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwo
U2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAg
IEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMubWluaW11bVRpbWVC
ZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID0gc2Vjb25kczsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldEdyYW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMp
Cit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgQVNTRVJUKHNlY29uZHMg
Pj0gMF9zKTsKKworICAgIG1fcGFyYW1ldGVycy5ncmFuZGZhdGhlcmluZ1RpbWUgPSBzZWNvbmRz
OworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0Q2FjaGVNYXhBZ2VD
YXAoU2Vjb25kcyBzZWNvbmRzKQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgIEFTU0VSVChzZWNvbmRzID49IDBfcyk7CisKKyAgICBtX3BhcmFtZXRlcnMuY2FjaGVNYXhB
Z2VDYXBUaW1lID0gc2Vjb25kczsKKyAgICB1cGRhdGVDYWNoZU1heEFnZUNhcCgpOworfQorCit2
b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRlQ2FjaGVNYXhBZ2VDYXAoKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworICAgIAorICAgIFJ1bkxvb3A6Om1h
aW4oKS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJh
bWV0ZXJzLmNhY2hlTWF4QWdlQ2FwVGltZV0gKCkgeworICAgICAgICBzdG9yZS0+c2V0Q2FjaGVN
YXhBZ2VDYXAoc2Vjb25kcywgW10geyB9KTsKKyAgICB9KTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OnNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29uZHMg
c2Vjb25kcykKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKyAgICBBU1NFUlQo
c2Vjb25kcyA+PSAwX3MpOworICAgIAorICAgIG1fcGFyYW1ldGVycy5jbGllbnRTaWRlQ29va2ll
c0FnZUNhcFRpbWUgPSBzZWNvbmRzOworICAgIHVwZGF0ZUNsaWVudFNpZGVDb29raWVzQWdlQ2Fw
KCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjp1cGRhdGVDbGllbnRT
aWRlQ29va2llc0FnZUNhcCgpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisK
KyNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQorICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbc3RvcmUgPSBtYWtlUmVmKG1fc3RvcmUpLCBzZWNvbmRzID0gbV9wYXJhbWV0
ZXJzLmNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZV0gKCkgeworICAgICAgICBpZiAoYXV0byog
bmV0d29ya1Nlc3Npb24gPSBzdG9yZS0+bmV0d29ya1Nlc3Npb24oKSkKKyAgICAgICAgICAgIG5l
dHdvcmtTZXNzaW9uLT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS5zZXRBZ2VDYXBGb3JDbGllbnRT
aWRlQ29va2llcyhzZWNvbmRzKTsKKyAgICB9KTsKKyNlbmRpZgorfQorCitib29sIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6c2hvdWxkUmVtb3ZlRGF0YVJlY29yZHMoKSBjb25zdAorewor
ICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgaWYgKG1fZGF0YVJlY29yZHNC
ZWluZ1JlbW92ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworI2lmIEVOQUJMRShORVRTQ0FQ
RV9QTFVHSU5fQVBJKQorICAgIGZvciAoY29uc3QgYXV0byYgcGx1Z2luIDogUGx1Z2luUHJvY2Vz
c01hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NlcygpKSB7CisgICAgICAgIGlmICgh
bV9hY3RpdmVQbHVnaW5Ub2tlbnMuY29udGFpbnMocGx1Z2luLT5wbHVnaW5Qcm9jZXNzVG9rZW4o
KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVy
biAhbV9sYXN0VGltZURhdGFSZWNvcmRzV2VyZVJlbW92ZWQgfHwgTW9ub3RvbmljVGltZTo6bm93
KCkgPj0gKG1fbGFzdFRpbWVEYXRhUmVjb3Jkc1dlcmVSZW1vdmVkICsgbV9wYXJhbWV0ZXJzLm1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbCk7Cit9CisKK3ZvaWQgUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXREYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZChib29sIHZhbHVl
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9kYXRhUmVjb3Jk
c0JlaW5nUmVtb3ZlZCA9IHZhbHVlOworICAgIGlmIChtX2RhdGFSZWNvcmRzQmVpbmdSZW1vdmVk
KQorICAgICAgICBtX2xhc3RUaW1lRGF0YVJlY29yZHNXZXJlUmVtb3ZlZCA9IE1vbm90b25pY1Rp
bWU6Om5vdygpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6dXBkYXRl
Q29va2llQmxvY2tpbmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4m
IGRvbWFpbnNUb0Jsb2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisgICAgCisgICAgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9yZSksIGRvbWFpbnNU
b0Jsb2NrID0gY3Jvc3NUaHJlYWRDb3B5KGRvbWFpbnNUb0Jsb2NrKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIHN0
b3JlLT5jYWxsVXBkYXRlUHJldmFsZW50RG9tYWluc1RvQmxvY2tDb29raWVzRm9ySGFuZGxlcihk
b21haW5zVG9CbG9jaywgW3N0b3JlID0gc3RvcmUuY29weVJlZigpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAg
c3RvcmUtPnN0YXRpc3RpY3NRdWV1ZSgpLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSk7
Cit9CisgICAgCisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjbGVhckJsb2Nr
aW5nU3RhdGVGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFp
bnMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAg
ICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGlmIChkb21haW5zLmlzRW1wdHko
KSkgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9IG1ha2VSZWYobV9zdG9y
ZSksIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlucyldIHsKKyAgICAgICAgc3RvcmUt
PmNhbGxSZW1vdmVEb21haW5zSGFuZGxlcihkb21haW5zKTsKKyAgICB9KTsKKworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7Cit9CisKK09wdGlvbmFsPFNlY29uZHM+IFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6c3RhdGlzdGljc0VwaXJhdGlvblRpbWUoKSBjb25zdAoreworICAgIGlmICht
X3BhcmFtZXRlcnMudGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbikKKyAgICAgICAgcmV0dXJuIFdh
bGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpIC0gbV9wYXJhbWV0ZXJzLnRpbWVUb0xp
dmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKTsKKyAgICAKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRl
cy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIHJldHVybiBtX29wZXJh
dGluZ0RhdGVzLmZpcnN0KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICAKKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitWZWN0b3I8T3BlcmF0aW5nRGF0ZT4gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKGNvbnN0IFZlY3RvcjxPcGVyYXRpbmdE
YXRlPiYgZXhpc3RpbmdEYXRlcywgVmVjdG9yPE9wZXJhdGluZ0RhdGU+JiYgbmV3RGF0ZXMpCit7
CisgICAgaWYgKGV4aXN0aW5nRGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGTW92
ZShuZXdEYXRlcyk7CisgICAgCisgICAgVmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1lcmdlZERhdGVz
KGV4aXN0aW5nRGF0ZXMuc2l6ZSgpICsgbmV3RGF0ZXMuc2l6ZSgpKTsKKyAgICAKKyAgICAvLyBN
ZXJnZSB0aGUgdHdvIHNvcnRlZCB2ZWN0b3JzIG9mIGRhdGVzLgorICAgIHN0ZDo6bWVyZ2UoZXhp
c3RpbmdEYXRlcy5iZWdpbigpLCBleGlzdGluZ0RhdGVzLmVuZCgpLCBuZXdEYXRlcy5iZWdpbigp
LCBuZXdEYXRlcy5lbmQoKSwgbWVyZ2VkRGF0ZXMuYmVnaW4oKSk7CisgICAgLy8gUmVtb3ZlIGR1
cGxpY2F0ZSBkYXRlcy4KKyAgICByZW1vdmVSZXBlYXRlZEVsZW1lbnRzKG1lcmdlZERhdGVzKTsK
KyAgICAKKyAgICAvLyBEcm9wIG9sZCBkYXRlcyB1bnRpbCB0aGUgVmVjdG9yIHNpemUgcmVhY2hl
cyBvcGVyYXRpbmdEYXRlc1dpbmRvdy4KKyAgICB3aGlsZSAobWVyZ2VkRGF0ZXMuc2l6ZSgpID4g
b3BlcmF0aW5nRGF0ZXNXaW5kb3cpCisgICAgICAgIG1lcmdlZERhdGVzLnJlbW92ZSgwKTsKKyAg
ICAKKyAgICByZXR1cm4gbWVyZ2VkRGF0ZXM7Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjptZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5l
d0RhdGVzKQoreworICAgIG1fb3BlcmF0aW5nRGF0ZXMgPSBtZXJnZU9wZXJhdGluZ0RhdGVzKG1f
b3BlcmF0aW5nRGF0ZXMsIFdURk1vdmUobmV3RGF0ZXMpKTsKK30KKwordm9pZCBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmU6OmluY2x1ZGVUb2RheUFzT3BlcmF0aW5nRGF0ZUlmTmVjZXNzYXJ5
KCkKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKKworICAgIGF1dG8gdG9kYXkg
PSBPcGVyYXRpbmdEYXRlOjp0b2RheSgpOworICAgIGlmICghbV9vcGVyYXRpbmdEYXRlcy5pc0Vt
cHR5KCkgJiYgdG9kYXkgPD0gbV9vcGVyYXRpbmdEYXRlcy5sYXN0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIHdoaWxlIChtX29wZXJhdGluZ0RhdGVzLnNpemUoKSA+PSBvcGVyYXRpbmdEYXRl
c1dpbmRvdykKKyAgICAgICAgbV9vcGVyYXRpbmdEYXRlcy5yZW1vdmUoMCk7CisKKyAgICBtX29w
ZXJhdGluZ0RhdGVzLmFwcGVuZCh0b2RheSk7Cit9CisKK2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChXYWxsVGltZSBtb3N0UmVjZW50VXNlcklu
dGVyYWN0aW9uVGltZSkgY29uc3QKK3sKKyAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsK
KyAgICAKKyAgICBpZiAobV9vcGVyYXRpbmdEYXRlcy5zaXplKCkgPj0gb3BlcmF0aW5nRGF0ZXNX
aW5kb3cpIHsKKyAgICAgICAgaWYgKE9wZXJhdGluZ0RhdGU6OmZyb21XYWxsVGltZShtb3N0UmVj
ZW50VXNlckludGVyYWN0aW9uVGltZSkgPCBtX29wZXJhdGluZ0RhdGVzLmZpcnN0KCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZG9uJ3QgbWVl
dCB0aGUgcmVhbCBjcml0ZXJpYSBmb3IgYW4gZXhwaXJlZCBzdGF0aXN0aWMsIGNoZWNrIHRoZSB1
c2VyIHNldHRpbmcgZm9yIGEgdGlnaHRlciByZXN0cmljdGlvbiAobWFpbmx5IGZvciB0ZXN0aW5n
KS4KKyAgICBpZiAobV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pIHsKKyAg
ICAgICAgaWYgKFdhbGxUaW1lOjpub3coKSA+IG1vc3RSZWNlbnRVc2VySW50ZXJhY3Rpb25UaW1l
ICsgbV9wYXJhbWV0ZXJzLnRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24udmFsdWUoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNTdGF0aXN0aWNzRXhwaXJlZChj
b25zdCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzJiByZXNvdXJjZVN0YXRpc3RpYykgY29uc3QKK3sK
KyAgICByZXR1cm4gaGFzU3RhdGlzdGljc0V4cGlyZWQocmVzb3VyY2VTdGF0aXN0aWMubW9zdFJl
Y2VudFVzZXJJbnRlcmFjdGlvblRpbWUpOworfQorCit2b2lkIFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZTo6c2V0TWF4U3RhdGlzdGljc0VudHJpZXMoc2l6ZV90IG1heGltdW1FbnRyeUNvdW50
KQoreworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgbV9wYXJhbWV0ZXJz
Lm1heFN0YXRpc3RpY3NFbnRyaWVzID0gbWF4aW11bUVudHJ5Q291bnQ7Cit9CisKK3ZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBy
dW5lVGFyZ2V0Q291bnQpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAg
ICBtX3BhcmFtZXRlcnMucHJ1bmVFbnRyaWVzRG93blRvID0gcHJ1bmVUYXJnZXRDb3VudDsKK30K
Kwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0UGFyYW1ldGVyc1RvRGVm
YXVsdFZhbHVlcygpCit7CisgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICBt
X3BhcmFtZXRlcnMgPSB7IH07Cit9CisKK3ZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
Ojpsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudCkKK3sKKyAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKKworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc3RvcmUg
PSBtYWtlUmVmKG1fc3RvcmUpLCBldmVudCA9IGV2ZW50Lmlzb2xhdGVkQ29weSgpXSB7CisgICAg
ICAgIHN0b3JlLT5sb2dUZXN0aW5nRXZlbnQoZXZlbnQpOworICAgIH0pOworfQorCit2b2lkIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVtb3ZlQWxsU3RvcmFnZUFjY2VzcyhDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7CisgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtzdG9yZSA9
IG1ha2VSZWYobV9zdG9yZSksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIHN0b3JlLT5yZW1vdmVBbGxTdG9yYWdlQWNj
ZXNzKFtzdG9yZSA9IHN0b3JlLmNvcHlSZWYoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHN0b3JlLT5zdGF0
aXN0aWNzUXVldWUoKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcigpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCit2b2lk
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6ZGlkQ3JlYXRlTmV0d29ya1Byb2Nlc3MoKQor
eworICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOworCisgICAgdXBkYXRlQ29va2llQmxv
Y2tpbmcoW10oKSB7IH0pOworICAgIHVwZGF0ZUNhY2hlTWF4QWdlQ2FwKCk7CisgICAgdXBkYXRl
Q2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKK30KKwordm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmU6OmRlYnVnTG9nRG9tYWluc0luQmF0Y2hlcyhjb25zdCBjaGFyKiBhY3Rpb24sIGNv
bnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnMpCit7CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgc3RhdGljIGNvbnN0IGF1dG8gbWF4TnVtYmVyT2ZEb21haW5zSW5P
bmVMb2dTdGF0ZW1lbnQgPSA1MDsKKyAgICBpZiAoZG9tYWlucy5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAoZG9tYWlucy5zaXplKCkgPD0gbWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfSU5GTyhSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGVidWcsICJBYm91dCB0byAle3B1YmxpY31zIGNvb2tpZXMgaW4gdGhp
cmQtcGFydHkgY29udGV4dHMgZm9yOiAle3B1YmxpY31zLiIsIGFjdGlvbiwgZG9tYWluc1RvU3Ry
aW5nKGRvbWFpbnMpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gYmF0Y2g7CisgICAgYmF0Y2gucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtYXhOdW1iZXJPZkRvbWFpbnNJbk9uZUxvZ1N0YXRlbWVudCk7Cisg
ICAgYXV0byBiYXRjaE51bWJlciA9IDE7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZCYXRjaGVzID0g
c3RkOjpjZWlsKGRvbWFpbnMuc2l6ZSgpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1heE51bWJlck9m
RG9tYWluc0luT25lTG9nU3RhdGVtZW50KSk7CisgICAgCisgICAgZm9yIChhdXRvJiBkb21haW4g
OiBkb21haW5zKSB7CisgICAgICAgIGlmIChiYXRjaC5zaXplKCkgPT0gbWF4TnVtYmVyT2ZEb21h
aW5zSW5PbmVMb2dTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lORk8oUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJsaWN9cyBjb29raWVzIGlu
IHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAldSk6ICV7cHVibGljfXMu
IiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBkb21haW5zVG9TdHJpbmco
YmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgYmF0Y2guc2hyaW5rKDApOworICAg
ICAgICAgICAgKytiYXRjaE51bWJlcjsKKyAgICAgICAgfQorICAgICAgICBiYXRjaC5hcHBlbmQo
ZG9tYWluKTsKKyAgICB9CisgICAgaWYgKCFiYXRjaC5pc0VtcHR5KCkpCisgICAgICAgIFJFTEVB
U0VfTE9HX0lORk8oUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnLCAiQWJvdXQgdG8gJXtwdWJs
aWN9cyBjb29raWVzIGluIHRoaXJkLXBhcnR5IGNvbnRleHRzIGZvciAoJXtwdWJsaWN9ZCBvZiAl
dSk6ICV7cHVibGljfXMuIiwgYWN0aW9uLCBiYXRjaE51bWJlciwgbnVtYmVyT2ZCYXRjaGVzLCBk
b21haW5zVG9TdHJpbmcoYmF0Y2gpLnV0ZjgoKS5kYXRhKCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oYWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZG9tYWlucyk7CisjZW5kaWYKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYyZTdiNjM2OGNmMzQxODJlN2MwN2M3NzIzYWMy
ZGJhNDNkNWUxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgKQEAgLTAsMCArMSwy
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShSRVNPVVJDRV9M
T0FEX1NUQVRJU1RJQ1MpCisKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
Zmllci5oIgorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KKwor
I2lmIEhBVkUoQ09SRV9QUkVESUNUSU9OKQorI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NDbGFzc2lmaWVyQ29jb2EuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBLZXllZERlY29kZXI7CitjbGFzcyBLZXllZEVuY29kZXI7CitzdHJ1Y3QgUmVzb3VyY2VMb2Fk
U3RhdGlzdGljczsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZTsKKworY2xhc3MgT3BlcmF0aW5nRGF0ZSB7Citw
dWJsaWM6CisgICAgT3BlcmF0aW5nRGF0ZSgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBzdGF0aWMg
T3BlcmF0aW5nRGF0ZSBmcm9tV2FsbFRpbWUoV2FsbFRpbWUpOworICAgIHN0YXRpYyBPcGVyYXRp
bmdEYXRlIHRvZGF5KCk7CisgICAgU2Vjb25kcyBzZWNvbmRzU2luY2VFcG9jaCgpIGNvbnN0Owor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7Cisg
ICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgT3BlcmF0aW5nRGF0ZSYgb3RoZXIpIGNvbnN0OworICAg
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBPcGVyYXRpbmdEYXRlJiBvdGhlcikgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIE9wZXJhdGluZ0RhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IG1v
bnRoRGF5KQorICAgICAgICA6IG1feWVhcih5ZWFyKQorICAgICAgICAsIG1fbW9udGgobW9udGgp
CisgICAgICAgICwgbV9tb250aERheShtb250aERheSkKKyAgICB7IH0KKworICAgIGludCBtX3ll
YXIgeyAwIH07CisgICAgaW50IG1fbW9udGggeyAwIH07IC8vIFswLCAxMV0uCisgICAgaW50IG1f
bW9udGhEYXkgeyAwIH07IC8vIFsxLCAzMV0uCit9OworCisvLyBUaGlzIGlzIGFsd2F5cyBjb25z
dHJ1Y3RlZCAvIHVzZWQgLyBkZXN0cm95ZWQgb24gdGhlIFdlYlJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NTdG9yZSdzIHN0YXRpc3RpY3MgcXVldWUuCitjbGFzcyBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
PiB7CitwdWJsaWM6CisgICAgdXNpbmcgUmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IFdlYkNvcmU6
OlJlc291cmNlTG9hZFN0YXRpc3RpY3M7CisgICAgdXNpbmcgUmVnaXN0cmFibGVEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBUb3BGcmFtZURvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFN1YkZyYW1lRG9tYWluID0gV2Vi
Q29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgU3ViUmVzb3VyY2VEb21haW4gPSBX
ZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbjsKKyAgICB1c2luZyBSZWRpcmVjdERvbWFpbiA9IFdl
YkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIFJlZGlyZWN0ZWRGcm9tRG9tYWlu
ID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgUmVkaXJlY3RlZFRvRG9t
YWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgTmF2aWdhdGVkRnJv
bURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOworICAgIHVzaW5nIE5hdmlnYXRl
ZFRvRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNpbmcgRG9tYWlu
SW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAg
dXNpbmcgT3BlbmVyRG9tYWluID0gV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW47CisgICAgdXNp
bmcgT3BlbmVyUGFnZUlEID0gdWludDY0X3Q7CisgICAgdXNpbmcgUGFnZUlEID0gdWludDY0X3Q7
CisgICAgdXNpbmcgRnJhbWVJRCA9IHVpbnQ2NF90OworICAgIAorICAgIHZpcnR1YWwgflJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSgpOworCisgICAgdmlydHVhbCB2b2lkIGNsZWFyKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvb2tpZUJsb2NraW5nKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJikgPSAwOworICAgIHZvaWQgdXBkYXRlQ29va2llQmxvY2tp
bmdGb3JEb21haW5zKGNvbnN0IFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4mIGRvbWFpbnNUb0Js
b2NrLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xlYXJCbG9ja2lu
Z1N0YXRlRm9yRG9tYWlucyhjb25zdCBWZWN0b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5z
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworCisgICAgdm9pZCBpbmNsdWRlVG9kYXlB
c09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgpOworICAgIHZvaWQgcHJvY2Vzc1N0YXRpc3RpY3NB
bmREYXRhUmVjb3JkcygpOworCisgICAgdmlydHVhbCB2b2lkIGNsYXNzaWZ5UHJldmFsZW50UmVz
b3VyY2VzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jU3RvcmFnZUlmTmVlZGVkKCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jU3RvcmFnZUltbWVkaWF0ZWx5KCkgPSAwOworCisgICAg
dmlydHVhbCB2b2lkIHJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJPcGVuZXIoRG9tYWluSW5OZWVk
T2ZTdG9yYWdlQWNjZXNzJiYsIE9wZW5lclBhZ2VJRCwgT3BlbmVyRG9tYWluJiYpID0gMDsKKyAg
ICB2b2lkIHJlbW92ZUFsbFN0b3JhZ2VBY2Nlc3MoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKKworICAgIHZvaWQgZ3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBjYW5jZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nl
c3NpbmdSZXF1ZXN0KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWdpc3RlcmVkQXNTdWJyZXNv
dXJjZVVuZGVyKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4m
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzUmVnaXN0ZXJlZEFzU3ViRnJhbWVVbmRl
cihjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8oY29uc3QgUmVk
aXJlY3RlZEZyb21Eb21haW4mLCBjb25zdCBSZWRpcmVjdGVkVG9Eb21haW4mKSBjb25zdCA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3Ry
YWJsZURvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBkdW1wUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJj
ZShjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNWZXJ5UHJldmFsZW50UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFByZXZhbGVudFJlc291cmNlKGNvbnN0IFJlZ2lzdHJh
YmxlRG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ5UHJldmFsZW50UmVzb3Vy
Y2UoY29uc3QgUmVnaXN0cmFibGVEb21haW4mKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
R3JhbmRmYXRoZXJlZChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGJvb2wgdmFsdWUpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGluY3JlbWVudFJlY29yZHNEZWxldGVk
Q291bnRGb3JEb21haW5zKEhhc2hTZXQ8UmVnaXN0cmFibGVEb21haW4+JiYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ3JhbmRmYXRoZXJEYXRhRm9yRG9tYWlucyhjb25zdCBIYXNoU2V0PFJlZ2lz
dHJhYmxlRG9tYWluPiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRTdWJmcmFtZVVuZGVy
VG9wRnJhbWVEb21haW4oY29uc3QgU3ViRnJhbWVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFp
biYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U3VicmVzb3VyY2VVbmRlclRvcEZyYW1lRG9t
YWluKGNvbnN0IFN1YlJlc291cmNlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhjb25zdCBT
dWJSZXNvdXJjZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShjb25zdCBTdWJSZXNvdXJj
ZURvbWFpbiYsIGNvbnN0IFJlZGlyZWN0RG9tYWluJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBS
ZWRpcmVjdERvbWFpbiYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb20oY29uc3QgVG9wRnJhbWVEb21haW4mLCBjb25zdCBSZWRpcmVjdERvbWFpbiYp
ID0gMDsKKworICAgIHZvaWQgbG9nVGVzdGluZ0V2ZW50KGNvbnN0IFN0cmluZyYpOworCisgICAg
dm9pZCBzZXRNYXhTdGF0aXN0aWNzRW50cmllcyhzaXplX3QgbWF4aW11bUVudHJ5Q291bnQpOwor
ICAgIHZvaWQgc2V0UHJ1bmVFbnRyaWVzRG93blRvKHNpemVfdCBwcnVuZVRhcmdldENvdW50KTsK
KyAgICB2b2lkIHJlc2V0UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcygpOworICAgIE9wdGlvbmFs
PFNlY29uZHM+IHN0YXRpc3RpY3NFcGlyYXRpb25UaW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgY2FsY3VsYXRlQW5kU3VibWl0VGVsZW1ldHJ5KCkgY29uc3QgPSAwOworCisgICAgdm9p
ZCBzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVkKGJvb2wpOworICAgIHZv
aWQgc2V0U2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNCZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwoYm9v
bCk7CisgICAgdm9pZCBzZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkoYm9vbCk7CisgICAgdm9pZCBz
ZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29uZHMpOworICAgIHZvaWQgc2V0TWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFNlY29uZHMpOworICAgIHZvaWQgc2V0R3Jh
bmRmYXRoZXJpbmdUaW1lKFNlY29uZHMpOworICAgIHZvaWQgc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RlYnVnTW9kZShib29sKTsKKyAgICBib29sIGlzRGVidWdNb2RlRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdNb2RlRW5hYmxlZDsgfTsKKyAgICB2b2lkIHNldFByZXZhbGVudFJl
c291cmNlRm9yRGVidWdNb2RlKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJik7CisKKyAgICB2aXJ0
dWFsIHZvaWQgaGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBTdWJGcmFtZURvbWFpbiYsIGNvbnN0IFRv
cEZyYW1lRG9tYWluJiwgT3B0aW9uYWw8RnJhbWVJRD4sIFBhZ2VJRCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sKT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0U3RvcmFnZUFj
Y2VzcyhTdWJGcmFtZURvbWFpbiYmLCBUb3BGcmFtZURvbWFpbiYmLCBGcmFtZUlELCBQYWdlSUQs
IGJvb2wgcHJvbXB0RW5hYmxlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdG9yYWdlQWNjZXNz
U3RhdHVzKT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3MoU3Vi
RnJhbWVEb21haW4mJiwgVG9wRnJhbWVEb21haW4mJiwgRnJhbWVJRCwgUGFnZUlELCBib29sIHVz
ZXJXYXNQcm9tcHRlZE5vdywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGxvZ0ZyYW1lTmF2aWdhdGlvbihjb25zdCBOYXZpZ2F0ZWRUb0Rv
bWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgY29uc3QgTmF2aWdhdGVkRnJvbURvbWFpbiYs
IGJvb2wgaXNSZWRpcmVjdCwgYm9vbCBpc01haW5GcmFtZSkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2dVc2VySW50ZXJhY3Rpb24oY29uc3QgVG9wRnJhbWVEb21haW4mKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvZ1N1YnJlc291cmNlTG9hZGluZyhjb25zdCBTdWJSZXNvdXJjZURvbWFpbiYs
IGNvbnN0IFRvcEZyYW1lRG9tYWluJiwgV2FsbFRpbWUgbGFzdFNlZW4pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWRpcmVjdGVkRnJvbURvbWFp
biYsIGNvbnN0IFJlZGlyZWN0ZWRUb0RvbWFpbiYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBj
bGVhclVzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzSGFkVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldExhc3RTZWVuKGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiBwcmltYXJ5RG9tYWluLCBTZWNvbmRzKSA9IDA7CisKKyAgICB2b2lkIGRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBjb25zdCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmUmIHN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yZTsgfQorCisgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBtYXhJbXBvcnRhbmNlIHsgMyB9OworCisgICAgdmlydHVhbCBib29s
IGlzTWVtb3J5U3RvcmUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0RhdGFiYXNlU3RvcmUoKWNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZUltcG9ydGFuY2UoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VMb2FkU3RhdGlzdGljcyYpOworICAgIHN0YXRpYyBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4g
bWVyZ2VPcGVyYXRpbmdEYXRlcyhjb25zdCBWZWN0b3I8T3BlcmF0aW5nRGF0ZT4mIGV4aXN0aW5n
RGF0ZXMsIFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmIG5ld0RhdGVzKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZWJ1Z0xvZ0RvbWFpbnNJbkJhdGNoZXMoY29uc3QgY2hhciogYWN0aW9uLCBjb25zdCBWZWN0
b3I8UmVnaXN0cmFibGVEb21haW4+JiBkb21haW5zKTsKKworICAgIFJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUmLCBXb3JrUXVldWUmKTsK
KworICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoY29uc3QgUmVzb3VyY2VMb2FkU3RhdGlz
dGljcyYpIGNvbnN0OworICAgIGJvb2wgaGFzU3RhdGlzdGljc0V4cGlyZWQoV2FsbFRpbWUgbW9z
dFJlY2VudFVzZXJJbnRlcmFjdGlvblRpbWUpIGNvbnN0OworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIHZvaWQgcmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpOworI2VuZGlmCisgICAgdm9p
ZCBzY2hlZHVsZVN0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdElmTmVjZXNzYXJ5KCk7CisgICAg
dm9pZCBtZXJnZU9wZXJhdGluZ0RhdGVzKFZlY3RvcjxPcGVyYXRpbmdEYXRlPiYmKTsKKyAgICB2
aXJ0dWFsIFZlY3RvcjxSZWdpc3RyYWJsZURvbWFpbj4gZW5zdXJlUHJldmFsZW50UmVzb3VyY2Vz
Rm9yRGVidWdNb2RlKCkgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPFJlZ2lzdHJhYmxlRG9tYWlu
PiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZVdlYnNpdGVEYXRhRm9yKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwcnVuZVN0YXRpc3RpY3NJZk5lZWRlZCgpID0gMDsKKworICAgIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgc3RvcmUoKSB7IHJldHVybiBtX3N0b3JlOyB9CisgICAg
UmVmPFdvcmtRdWV1ZT4mIHdvcmtRdWV1ZSgpIHsgcmV0dXJuIG1fd29ya1F1ZXVlOyB9CisjaWYg
SEFWRShDT1JFX1BSRURJQ1RJT04pCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZp
ZXJDb2NvYSYgY2xhc3NpZmllcigpIHsgcmV0dXJuIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXI7IH0KKyNlbHNlCisgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIm
IGNsYXNzaWZpZXIoKSB7IHJldHVybiBtX3Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVy
OyB9CisjZW5kaWYKKworICAgIHN0cnVjdCBQYXJhbWV0ZXJzIHsKKyAgICAgICAgc2l6ZV90IHBy
dW5lRW50cmllc0Rvd25UbyB7IDgwMCB9OworICAgICAgICBzaXplX3QgbWF4U3RhdGlzdGljc0Vu
dHJpZXMgeyAxMDAwIH07CisgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb0xpdmVVc2Vy
SW50ZXJhY3Rpb247CisgICAgICAgIFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29y
ZHNSZW1vdmFsIHsgMV9oIH07CisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lIHsg
MjRfaCAqIDcgfTsKKyAgICAgICAgU2Vjb25kcyBjYWNoZU1heEFnZUNhcFRpbWUgeyAyNF9oICog
NyB9OworICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVDb29raWVzQWdlQ2FwVGltZSB7IDI0X2gg
KiA3IH07CisgICAgICAgIGJvb2wgc2hvdWxkTm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCB7IGZhbHNlIH07CisgICAgICAgIGJvb2wgc2hvdWxkQ2xhc3NpZnlSZXNvdXJjZXNC
ZWZvcmVEYXRhUmVjb3Jkc1JlbW92YWwgeyB0cnVlIH07CisgICAgICAgIGJvb2wgc2hvdWxkU3Vi
bWl0VGVsZW1ldHJ5IHsgdHJ1ZSB9OworICAgIH07CisgICAgY29uc3QgUGFyYW1ldGVycyYgcGFy
YW1ldGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxPcGVyYXRpbmdEYXRlPiYgb3BlcmF0aW5nRGF0ZXMoKSBjb25zdCB7IHJldHVybiBtX29wZXJh
dGluZ0RhdGVzOyB9CisgICAgdm9pZCBjbGVhck9wZXJhdGluZ0RhdGVzKCkgeyBtX29wZXJhdGlu
Z0RhdGVzLmNsZWFyKCk7IH0KKyAgICBXYWxsVGltZSYgZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVz
dGFtcCgpIHsgcmV0dXJuIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsgfQorICAgIGNv
bnN0IFdhbGxUaW1lJiBlbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wKCkgY29uc3QgeyByZXR1
cm4gbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wOyB9CisgICAgdm9pZCBzZXRFbmRPZkdy
YW5kZmF0aGVyaW5nVGltZXN0YW1wKGNvbnN0IFdhbGxUaW1lJiBncmFuZGZhdGhlcmluZ1RpbWUp
IHsgbV9lbmRPZkdyYW5kZmF0aGVyaW5nVGltZXN0YW1wID0gZ3JhbmRmYXRoZXJpbmdUaW1lOyB9
CisgICAgdm9pZCBjbGVhckVuZE9mR3JhbmRmYXRoZXJpbmdUaW1lU3RhbXAoKSB7IG1fZW5kT2ZH
cmFuZGZhdGhlcmluZ1RpbWVzdGFtcCA9IHsgfTsgfQorICAgIGNvbnN0IFJlZ2lzdHJhYmxlRG9t
YWluJiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1
Z01hbnVhbFByZXZhbGVudFJlc291cmNlOyB9CisgICAgY29uc3QgUmVnaXN0cmFibGVEb21haW4m
IGRlYnVnU3RhdGljUHJldmFsZW50UmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnU3Rh
dGljUHJldmFsZW50UmVzb3VyY2U7IH0KKyAgICBib29sIGRlYnVnTG9nZ2luZ0VuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2RlYnVnTG9nZ2luZ0VuYWJsZWQ7IH07CisgICAgYm9vbCBkZWJ1Z01v
ZGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z01vZGVFbmFibGVkOyB9CisgICAgYm9v
bCBzdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VB
Y2Nlc3NQcm9tcHRzRW5hYmxlZDsgfQorCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBt
YXhOdW1iZXJPZlJlY3Vyc2l2ZUNhbGxzSW5SZWRpcmVjdFRyYWNlQmFjayB7IDUwIH07CisKK3By
aXZhdGU6CisgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQoYm9vbCBlbmFi
bGVkKSB7IG1fc3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkICA9IGVuYWJsZWQ7IH0KKyAgICBi
b29sIHNob3VsZFJlbW92ZURhdGFSZWNvcmRzKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZWJ1Z0xv
Z2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9kZWJ1Z0xvZ2dpbmdFbmFibGVkICA9IGVu
YWJsZWQ7IH0KKyAgICB2b2lkIHNldERhdGFSZWNvcmRzQmVpbmdSZW1vdmVkKGJvb2wpOworICAg
IHZvaWQgcmVtb3ZlRGF0YVJlY29yZHMoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAg
ICB2b2lkIHNldENhY2hlTWF4QWdlQ2FwKFNlY29uZHMpOworICAgIHZvaWQgdXBkYXRlQ2FjaGVN
YXhBZ2VDYXAoKTsKKyAgICB2b2lkIHNldEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKFNlY29u
ZHMpOworICAgIHZvaWQgdXBkYXRlQ2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoKTsKKworICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZSYgbV9zdG9yZTsKKyAgICBSZWY8V29ya1F1ZXVl
PiBtX3dvcmtRdWV1ZTsKKyNpZiBIQVZFKENPUkVfUFJFRElDVElPTikKKyAgICBSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29hIG1fcmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXI7CisjZWxzZQorICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyIG1fcmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI7CisjZW5kaWYKKyNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKyAgICBIYXNoU2V0PHVpbnQ2NF90PiBtX2FjdGl2ZVBsdWdpblRva2Vu
czsKKyNlbmRpZgorICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOworICAgIFZlY3RvcjxPcGVy
YXRpbmdEYXRlPiBtX29wZXJhdGluZ0RhdGVzOworICAgIFdhbGxUaW1lIG1fZW5kT2ZHcmFuZGZh
dGhlcmluZ1RpbWVzdGFtcDsKKyAgICBSZWdpc3RyYWJsZURvbWFpbiBtX2RlYnVnTWFudWFsUHJl
dmFsZW50UmVzb3VyY2U7CisgICAgTW9ub3RvbmljVGltZSBtX2xhc3RUaW1lRGF0YVJlY29yZHNX
ZXJlUmVtb3ZlZDsKKyAgICB1aW50NjRfdCBtX2xhc3RTdGF0aXN0aWNzUHJvY2Vzc2luZ1JlcXVl
c3RJZGVudGlmaWVyIHsgMCB9OworICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3BlbmRpbmdTdGF0
aXN0aWNzUHJvY2Vzc2luZ1JlcXVlc3RJZGVudGlmaWVyOworICAgIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluIG1fZGVidWdTdGF0aWNQcmV2YWxlbnRSZXNvdXJjZSB7IFVSTCB7IFVSTCgpLCAiaHR0
cHM6Ly8zcmRwYXJ0eXRlc3R3ZWJraXQub3JnIl9zIH0gfTsKKyAgICBib29sIG1fZGVidWdMb2dn
aW5nRW5hYmxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2RlYnVnTW9kZUVuYWJsZWQgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9zdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJsZWQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9kYXRhUmVjb3Jkc0JlaW5nUmVtb3ZlZCB7IGZhbHNlIH07Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjlmN2U4ZjBhMjBkYWZlYTlhYjI5
ZTYwNzA3OGVmMTU3ZmIyYmJkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5t
bQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIK
KyNpbXBvcnQgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgorCisjaWYgRU5BQkxFKFJF
U09VUkNFX0xPQURfU1RBVElTVElDUykKKworI2ltcG9ydCA8V2ViQ29yZS9SZWdpc3RyYWJsZURv
bWFpbi5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVnaXN0ZXJVc2VyRGVmYXVsdHNJZk5lZWRlZCgpCit7Cisg
ICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBpbml0T25jZTsKKworICAgIGRpc3BhdGNoX29uY2Uo
JmluaXRPbmNlLCBeeworICAgICAgICBTZWNvbmRzIHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24o
W1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1RpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24iXSk7CisgICAgICAg
IGlmICh0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uID4gMF9zICYmIHRpbWVUb0xpdmVVc2VySW50
ZXJhY3Rpb24gPD0gMjRfaCAqIDMwKQorICAgICAgICAgICAgc2V0VGltZVRvTGl2ZVVzZXJJbnRl
cmFjdGlvbih0aW1lVG9MaXZlVXNlckludGVyYWN0aW9uKTsKKworICAgICAgICBTZWNvbmRzIG1p
bmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChbW05TVXNlckRlZmF1bHRzIHN0YW5k
YXJkVXNlckRlZmF1bHRzXSBkb3VibGVGb3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIl0pOworICAgICAgICBpZiAobWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsID4gMF9zICYmIG1pbmltdW1UaW1lQmV0d2Vl
bkRhdGFSZWNvcmRzUmVtb3ZhbCA8IDFfaCkKKyAgICAgICAgICAgIHNldE1pbmltdW1UaW1lQmV0
d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92
YWwpOworCisgICAgICAgIFNlY29uZHMgZ3JhbmRmYXRoZXJpbmdUaW1lKFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRp
c3RpY3NHcmFuZGZhdGhlcmluZ1RpbWUiXSk7CisgICAgICAgIGlmIChncmFuZGZhdGhlcmluZ1Rp
bWUgPiAwX3MgJiYgZ3JhbmRmYXRoZXJpbmdUaW1lIDw9IDI0X2ggKiA3KQorICAgICAgICAgICAg
c2V0R3JhbmRmYXRoZXJpbmdUaW1lKGdyYW5kZmF0aGVyaW5nVGltZSk7CisKKyAgICAgICAgc2V0
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZShbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJk
VXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiSXRwRGVidWdNb2RlIl0pOworICAgICAgICBhdXRv
KiBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291cmNlID0gW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFy
ZFVzZXJEZWZhdWx0c10gc3RyaW5nRm9yS2V5OkAiSXRwTWFudWFsUHJldmFsZW50UmVzb3VyY2Ui
XTsKKyAgICAgICAgaWYgKGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UpIHsKKyAgICAgICAg
ICAgIFVSTCB1cmwgeyBVUkwoKSwgZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSB9OworICAg
ICAgICAgICAgaWYgKCF1cmwuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiaHR0
cDovLyIpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRlYnVnTWFudWFsUHJldmFs
ZW50UmVzb3VyY2UpOworICAgICAgICAgICAgICAgIHVybCA9IHsgVVJMKCksIGJ1aWxkZXIudG9T
dHJpbmcoKSB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHVybC5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgc2V0UHJldmFsZW50UmVzb3VyY2VGb3JEZWJ1Z01vZGUoUmVnaXN0
cmFibGVEb21haW4geyB1cmwgfSk7CisgICAgICAgIH0KKworICAgICAgICBTZWNvbmRzIGNhY2hl
TWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRV
c2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDYWNoZU1h
eEFnZUNhcCJdKTsKKyAgICAgICAgaWYgKGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3Vy
Y2VzID4gMF9zICYmIGNhY2hlTWF4QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzIDw9IDI0X2gg
KiAzNjUpCisgICAgICAgICAgICBzZXRDYWNoZU1heEFnZUNhcChjYWNoZU1heEFnZUNhcEZvclBy
ZXZhbGVudFJlc291cmNlcyk7CisgICAgICAgIAorICAgICAgICBTZWNvbmRzIGNsaWVudFNpZGVD
b29raWVzQWdlQ2FwKFtbTlNVc2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJs
ZUZvcktleTpAIlJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGllbnRTaWRlQ29va2llc0FnZUNhcCJd
KTsKKyAgICAgICAgaWYgKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwID4gMF9zICYmIGNsaWVudFNp
ZGVDb29raWVzQWdlQ2FwIDw9IDI0X2ggKiAzNjUpCisgICAgICAgICAgICBzZXRBZ2VDYXBGb3JD
bGllbnRTaWRlQ29va2llcyhjbGllbnRTaWRlQ29va2llc0FnZUNhcCk7CisgICAgfSk7Cit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCmluZGV4IDY1NWQxMWU5YjVjNmNhZGE3YzliNTI1MzY5YzRmZTVjYTg0MmZkZjAuLjM3
MTNmOWIxNzFjMWI1MTk4MDk3NzJmMWIwOTIxYjE1MjdiNzkxNmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVk
ZSAiTmV0d29ya1Nlc3Npb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZS5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZS5o
IgogI2luY2x1ZGUgIlNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljcy5oIgpAQCAtNDgsNiArNDks
OSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0ZURhdGFiYXNlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KICNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dy
ZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC04Niw4ICs5MCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2Fu
bmVkKGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0
aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1f
bWVtb3J5U3RvcmUtPnNldE5vdGlmeVBhZ2VzV2hlbkRhdGFSZWNvcmRzV2VyZVNjYW5uZWQodmFs
dWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRp
c3RpY3NTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2YWx1
ZSk7CiAgICAgfSk7CiB9CiAKQEAgLTk2LDkgKzEwMCw5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpzZXROb3RpZnlQYWdlc1doZW5EYXRhUmVjb3Jkc1dlcmVTY2FubmVk
KGJvCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhb
dGhpcywgdmFsdWUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAg
bV9tZW1vcnlTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJlU2Nhbm5lZCh2
YWx1ZSk7Ci0gICAgICAgIAorICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAg
ICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0Tm90aWZ5UGFnZXNXaGVuRGF0YVJlY29yZHNXZXJl
U2Nhbm5lZCh2YWx1ZSk7CisKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC0xMDgsOCArMTEyLDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3Jl
RGF0YVJlY29yZHMKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRh
c2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAg
ICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVmb3JlRGF0YVJl
Y29yZHNSZW1vdmFsKHZhbHVlKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAg
ICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPnNldFNob3VsZENsYXNzaWZ5UmVzb3VyY2VzQmVm
b3JlRGF0YVJlY29yZHNSZW1vdmFsKHZhbHVlKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKQEAgLTEyMCw4ICsxMjQsOCBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U2hvdWxkU3VibWl0VGVsZW1l
dHJ5KGJvb2wgdmFsdWUpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBv
c3RUYXNrKFt0aGlzLCB2YWx1ZV0gewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAg
ICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFNob3VsZFN1Ym1pdFRlbGVtZXRyeSh2YWx1ZSk7Cisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5zZXRTaG91bGRTdWJtaXRUZWxlbWV0cnkodmFsdWUpOwogICAgIH0pOwogfQogCkBAIC0x
NDEsMTMgKzE0NSwyMiBAQCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShOZXR3b3JrU2Vzc2lvbiYgbgogICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIHJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkgPSByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5Lmlzb2xh
dGVkQ29weSgpXSB7Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJl
c291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVl
KTsKLSAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZSA9IHN0ZDo6bWFrZV91bmlxdWU8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPigqbV9tZW1vcnlTdG9yZSwgbV9zdGF0
aXN0aWNzUXVldWUsIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOworICAgICAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5pc0lUUERhdGFiYXNl
RW5hYmxlZCgpKSB7CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZSA9IHN0ZDo6bWFrZV91
bmlxdWU8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCp0aGlzLCBtX3N0YXRp
c3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSk7CisKKyAgICAgICAg
ICAgIGF1dG8gbWVtb3J5U3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlc291cmNlTG9hZFN0YXRp
c3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1ZXVlKTsKKyAgICAgICAgICAg
IGF1dG8gcGVyc2lzdGVudFN0b3JlID0gc3RkOjptYWtlX3VuaXF1ZTxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGVyc2lzdGVudFN0b3JhZ2U+KCptZW1vcnlTdG9yZSwgbV9zdGF0aXN0aWNzUXVldWUs
IHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpOworCisgICAgICAgICAgICBkb3duY2Fz
dDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3Jl
LmdldCgpKS5wb3B1bGF0ZUZyb21NZW1vcnlTdG9yZSgqbWVtb3J5U3RvcmUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKnRoaXMsIG1fc3RhdGlzdGljc1F1
ZXVlKTsKKyAgICAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UgPSBzdGQ6Om1ha2VfdW5pcXVl
PFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJzaXN0ZW50U3RvcmFnZT4oZG93bmNhc3Q8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLCBtX3N0YXRp
c3RpY3NRdWV1ZSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSk7CisgICAgICAgIH0K
IAogICAgICAgICAvLyBGSVhNRSgxOTMyOTcpOiBUaGlzIHNob3VsZCBiZSByZXZpc2VkIGFmdGVy
IHRoZSBVSVByb2Nlc3MgdmVyc2lvbiBnb2VzIGF3YXkuCi0gICAgICAgIG1fbWVtb3J5U3RvcmUt
PmRpZENyZWF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5k
aWRDcmVhdGVOZXR3b3JrUHJvY2VzcygpOwogICAgIH0pOwotICAgIAorCiAgICAgbV9kYWlseVRh
c2tzVGltZXIuc3RhcnRSZXBlYXRpbmcoMjRfaCk7CiB9CiAKQEAgLTE3Niw3ICsxODksNyBAQCB2
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVyc2lz
dGVudFN0b3JlKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCi0gICAgaWYg
KCFtX3BlcnNpc3RlbnRTdG9yYWdlICYmICFtX21lbW9yeVN0b3JlKQorICAgIGlmICghbV9wZXJz
aXN0ZW50U3RvcmFnZSAmJiAhbV9zdGF0aXN0aWNzU3RvcmUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIE1ha2Ugc3VyZSB3ZSBkZXN0cm95IHRoZSBwZXJzaXN0ZW50IHN0b3JlIG9uIHRoZSBi
YWNrZ3JvdW5kIHF1ZXVlIGFuZCB3YWl0IGZvciBpdCB0byBkaWUKQEAgLTE4Niw3ICsxOTksNyBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Zmx1c2hBbmREZXN0cm95UGVy
c2lzdGVudFN0b3JlKCkKICAgICBCaW5hcnlTZW1hcGhvcmUgc2VtYXBob3JlOwogICAgIG1fc3Rh
dGlzdGljc1F1ZXVlLT5kaXNwYXRjaChbJnNlbWFwaG9yZSwgdGhpc10gewogICAgICAgICBtX3Bl
cnNpc3RlbnRTdG9yYWdlID0gbnVsbHB0cjsKLSAgICAgICAgbV9tZW1vcnlTdG9yZSA9IG51bGxw
dHI7CisgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlID0gbnVsbHB0cjsKICAgICAgICAgc2VtYXBo
b3JlLnNpZ25hbCgpOwogICAgIH0pOwogICAgIHNlbWFwaG9yZS53YWl0KCk7CkBAIC0xOTcsOCAr
MjEwLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFJlc291cmNl
TG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUoYm9vbCB2YWwKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9t
ZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NEZWJ1Z01vZGUodmFsdWUpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RlYnVnTW9kZSh2YWx1ZSk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtMjA4LDggKzIyMSw4IEBAIHZvaWQgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVnTW9k
ZShjb25zdCBSZWdpCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBw
b3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFByZXZh
bGVudFJlc291cmNlRm9yRGVidWdNb2RlKGRvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRpc3Rp
Y3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRQcmV2YWxlbnRSZXNv
dXJjZUZvckRlYnVnTW9kZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTIxOSw4ICsyMzIsOCBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVTdGF0aXN0aWNzQW5kRGF0
YVJlY29yZHNQcm9jZXNzaW5nKAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAg
CiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAg
ICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3Jkcygp
OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+cHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwogICAgICAgICBwb3N0
VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTIz
OCwxNyArMjUxLDE5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpyZXNv
dXJjZUxvYWRTdGF0aXN0aWNzVXBkYXRlZChWZWN0b3I8V2ViQ29yCiAgICAgLy8gY29taW5nIGZy
b20gSVBDLiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG9ubHkgY29udGFpbnMgc3RyaW5ncyB3aGlj
aCBhcmUgc2FmZSB0byBtb3ZlIHRvIG90aGVyIHRocmVhZHMgYXMgbG9uZwogICAgIC8vIGFzIG5v
Ym9keSBvbiB0aGlzIHRocmVhZCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aG9zZSBzdHJpbmdzLgog
ICAgIHBvc3RUYXNrKFt0aGlzLCBvcmlnaW5zID0gV1RGTW92ZShvcmlnaW5zKV0oKSBtdXRhYmxl
IHsKLSAgICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKQorICAgICAgICBpZiAoIW1fc3RhdGlzdGlj
c1N0b3JlIHx8ICFpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCptX3N0YXRp
c3RpY3NTdG9yZSkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+bWVyZ2VTdGF0aXN0aWNzKFdURk1vdmUob3JpZ2lucykpOworICAgICAgICBhdXRvJiBtZW1v
cnlTdG9yZSA9IGRvd25jYXN0PFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZT4oKm1f
c3RhdGlzdGljc1N0b3JlKTsKKyAgICAKKyAgICAgICAgbWVtb3J5U3RvcmUubWVyZ2VTdGF0aXN0
aWNzKFdURk1vdmUob3JpZ2lucykpOwogCiAgICAgICAgIC8vIFdlIGNhbiBjYW5jZWwgYW55IHBl
bmRpbmcgcmVxdWVzdCB0byBwcm9jZXNzIHN0YXRpc3RpY3Mgc2luY2Ugd2UncmUgZG9pbmcgaXQg
c3luY2hyb25vdXNseSBiZWxvdy4KLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+Y2FuY2VsUGVuZGlu
Z1N0YXRpc3RpY3NQcm9jZXNzaW5nUmVxdWVzdCgpOworICAgICAgICBtZW1vcnlTdG9yZS5jYW5j
ZWxQZW5kaW5nU3RhdGlzdGljc1Byb2Nlc3NpbmdSZXF1ZXN0KCk7CiAKICAgICAgICAgLy8gRmly
ZSBiZWZvcmUgcHJvY2Vzc2luZyBzdGF0aXN0aWNzIHRvIHByb3BhZ2F0ZSB1c2VyIGludGVyYWN0
aW9uIGFzIGZhc3QgYXMgcG9zc2libGUgdG8gdGhlIG5ldHdvcmsgcHJvY2Vzcy4KLSAgICAgICAg
bV9tZW1vcnlTdG9yZS0+dXBkYXRlQ29va2llQmxvY2tpbmcoW10oKSB7IH0pOwotICAgICAgICBt
X21lbW9yeVN0b3JlLT5wcm9jZXNzU3RhdGlzdGljc0FuZERhdGFSZWNvcmRzKCk7CisgICAgICAg
IG1lbW9yeVN0b3JlLnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtdKCkgeyB9KTsKKyAgICAgICAgbWVt
b3J5U3RvcmUucHJvY2Vzc1N0YXRpc3RpY3NBbmREYXRhUmVjb3JkcygpOwogICAgIH0pOwogfQog
CkBAIC0yNTgsMTcgKzI3MywyMCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6aGFzU3RvcmFnZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgcwogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21h
aW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BG
cmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZnJhbWVJRCwgcGFnZUlELCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBp
ZiAoIW1fbWVtb3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSkgewog
ICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihmYWxzZSk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBtX21lbW9yeVN0b3JlLT5oYXNTdG9yYWdlQWNjZXNzKHN1YkZyYW1l
RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYm9vbCBoYXNTdG9yYWdlQWNjZXNzKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGhhc1N0b3JhZ2VBY2Nlc3NdKCkgbXV0YWJsZSB7
Ci0gICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaGFzU3RvcmFnZUFjY2Vzcyk7CisK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+aGFzU3RvcmFnZUFjY2VzcyhzdWJGcmFtZURvbWFpbiwgdG9wRnJhbWVEb21haW4s
IGZyYW1lSUQsIHBhZ2VJRCwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKGJvb2wgaGFzU3RvcmFnZUFjY2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICAg
ICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgaGFzU3RvcmFnZUFjY2Vzc10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoaGFzU3RvcmFnZUFjY2Vzcyk7CisgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0K
IApAQCAtMzI1LDE4ICszNDMsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkKICAgICB9CiAK
ICAgICBwb3N0VGFzayhbdGhpcywgc3ViRnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29s
YXRlZENvcHkoKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHko
KSwgZnJhbWVJRCwgcGFnZUlELCBwcm9tcHRFbmFibGVkLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAoIW1fbWVt
b3J5U3RvcmUpIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAg
ICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihT
dG9yYWdlQWNjZXNzU3RhdHVzOjpDYW5ub3RSZXF1ZXN0QWNjZXNzKTsKICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9tZW1vcnlTdG9y
ZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUo
dG9wRnJhbWVEb21haW4pLCBmcmFtZUlELnZhbHVlKCksIHBhZ2VJRCwgcHJvbXB0RW5hYmxlZCwg
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFN0b3JhZ2VB
Y2Nlc3NTdGF0dXMgc3RhdHVzKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIHBvc3RUYXNrUmVwbHko
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN0YXR1c10o
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihzdGF0dXMpOwor
ICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2VzcyhXVEZNb3ZlKHN1YkZyYW1lRG9tYWluKSwgV1RG
TW92ZSh0b3BGcmFtZURvbWFpbiksIGZyYW1lSUQudmFsdWUoKSwgcGFnZUlELCBwcm9tcHRFbmFi
bGVkLCBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3Rv
cmFnZUFjY2Vzc1N0YXR1cyBzdGF0dXMpIG11dGFibGUgeworICAgICAgICAgICAgICAgIHBvc3RU
YXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IHN0YXR1c10oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKKyAgICAgICAgfQogICAgIH0pOwogfQogCkBAIC0zNDgsOCArMzY4LDggQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlcXVlc3RTdG9yYWdlQWNjZXNzVW5kZXJP
cGVuZXIoUmVnaXN0cmFibGUKICAgICAvLyBjb21pbmcgZnJvbSBJUEMuIFN0cmluZ3Mgd2hpY2gg
YXJlIHNhZmUgdG8gbW92ZSB0byBvdGhlciB0aHJlYWRzIGFzIGxvbmcgYXMgbm9ib2R5IG9uIHRo
aXMgdGhyZWFkIGhvbGRzIGEgcmVmZXJlbmNlCiAgICAgLy8gdG8gdGhvc2Ugc3RyaW5ncy4KICAg
ICBwb3N0VGFzayhbdGhpcywgZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzID0gV1RGTW92ZShk
b21haW5Jbk5lZWRPZlN0b3JhZ2VBY2Nlc3MpLCBvcGVuZXJQYWdlSUQsIG9wZW5lckRvbWFpbiA9
IFdURk1vdmUob3BlbmVyRG9tYWluKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5
U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5yZXF1ZXN0U3RvcmFnZUFjY2Vzc1Vu
ZGVyT3BlbmVyKFdURk1vdmUoZG9tYWluSW5OZWVkT2ZTdG9yYWdlQWNjZXNzKSwgb3BlbmVyUGFn
ZUlELCBXVEZNb3ZlKG9wZW5lckRvbWFpbikpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3Rv
cmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+cmVxdWVzdFN0b3JhZ2VBY2Nlc3NV
bmRlck9wZW5lcihXVEZNb3ZlKGRvbWFpbkluTmVlZE9mU3RvcmFnZUFjY2VzcyksIG9wZW5lclBh
Z2VJRCwgV1RGTW92ZShvcGVuZXJEb21haW4pKTsKICAgICB9KTsKIH0KIApAQCAtMzU3LDE4ICsz
NzcsMjAgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmdyYW50U3RvcmFn
ZUFjY2Vzcyhjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzdWJGcmFtZURvbWFpbiA9IHN1YkZyYW1l
RG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlz
b2xhdGVkQ29weSgpLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3Rv
cmUpIHsKICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBtX21lbW9yeVN0b3JlLT5ncmFudFN0b3JhZ2VBY2Nl
c3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJhbWVEb21haW4pLCBmcmFt
ZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFjY2VzcykgbXV0YWJsZSB7
Ci0gICAgICAgICAgICBwb3N0VGFza1JlcGx5KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCB3YXNHcmFudGVkQWNjZXNzXSgpIG11dGFibGUgewotICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHdhc0dyYW50ZWRBY2Nlc3MpOworICAgICAgICBp
ZiAobV9zdGF0aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5n
cmFudFN0b3JhZ2VBY2Nlc3MoV1RGTW92ZShzdWJGcmFtZURvbWFpbiksIFdURk1vdmUodG9wRnJh
bWVEb21haW4pLCBmcmFtZUlELCBwYWdlSUQsIHVzZXJXYXNQcm9tcHRlZE5vdywgW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKGJvb2wgd2FzR3JhbnRlZEFj
Y2VzcykgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgd2FzR3JhbnRlZEFjY2Vzc10o
KSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIod2FzR3Jh
bnRlZEFjY2Vzcyk7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7CisgICAgICAgIH0KICAgICB9KTsKIH0KIApAQCAtMzk3LDkgKzQxOSw5IEBAIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpkaWRDcmVhdGVOZXR3b3JrUHJvY2Vzcygp
CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzXSB7
Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKKyAgICAgICAgaWYgKCFtX3N0YXRpc3RpY3NT
dG9yZSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9tZW1vcnlTdG9yZS0+ZGlkQ3Jl
YXRlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmRpZENyZWF0
ZU5ldHdvcmtQcm9jZXNzKCk7CiAgICAgfSk7CiB9CiAKQEAgLTQyMywxMSArNDQ1LDEwIEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNrcygpCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzXSB7Ci0g
ICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBtX21lbW9yeVN0b3JlLT5pbmNsdWRlVG9kYXlBc09wZXJhdGluZ0RhdGVJZk5lY2Vzc2FyeSgp
OwotICAgICAgICBtX21lbW9yeVN0b3JlLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKSB7CisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+aW5jbHVkZVRvZGF5QXNPcGVyYXRpbmdEYXRlSWZOZWNlc3NhcnkoKTsKKyAgICAg
ICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5jYWxjdWxhdGVBbmRTdWJtaXRUZWxlbWV0cnkoKTsK
KyAgICAgICAgfQogICAgIH0pOwogfQogCkBAIC00MzYsOCArNDU3LDggQEAgdm9pZCBXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnN1Ym1pdFRlbGVtZXRyeShDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRh
c2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSAgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnk6OmNhbGN1bGF0ZUFuZFN1Ym1pdCgqbV9t
ZW1vcnlTdG9yZSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSAmJiBpczxSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpCisgICAgICAg
ICAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVsZW1ldHJ5OjpjYWxjdWxhdGVBbmRTdWJt
aXQoZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlPigqbV9zdGF0aXN0
aWNzU3RvcmUpKTsKIAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICAgICB9KTsKQEAgLTQ3NiwyNyArNDk3LDI2IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpsb2dGcmFtZU5hdmlnYXRpb24oY29uc3QgV2ViRnJhbWVQcm94
eSYgZnJhCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nRnJhbWVOYXZp
Z2F0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lz
dHJhYmxlRG9tYWluJiB0b3BGcmFtZURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHNv
dXJjZURvbWFpbiwgYm9vbCBpc1JlZGlyZWN0LCBib29sIGlzTWFpbkZyYW1lKQogewogICAgIHBv
c3RUYXNrKFt0aGlzLCB0YXJnZXREb21haW4gPSB0YXJnZXREb21haW4uaXNvbGF0ZWRDb3B5KCks
IHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIHNvdXJjZURv
bWFpbiA9IHNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgaXNSZWRpcmVjdCwgaXNNYWluRnJh
bWVdIHsKLQotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPmxvZ0ZyYW1lTmF2aWdhdGlvbih0YXJnZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBz
b3VyY2VEb21haW4sIGlzUmVkaXJlY3QsIGlzTWFpbkZyYW1lKTsKKyAgICAgICAgaWYgKG1fc3Rh
dGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmxvZ0ZyYW1lTmF2
aWdhdGlvbih0YXJnZXREb21haW4sIHRvcEZyYW1lRG9tYWluLCBzb3VyY2VEb21haW4sIGlzUmVk
aXJlY3QsIGlzTWFpbkZyYW1lKTsKICAgICB9KTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OmxvZ1dlYlNvY2tldExvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVEb21h
aW4mIHRhcmdldERvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvcEZyYW1lRG9tYWlu
LCBXYWxsVGltZSBsYXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJnZXREb21haW4gPSB0YXJnZXRE
b21haW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNv
bGF0ZWRDb3B5KCksIGxhc3RTZWVuLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAg
ICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21h
aW4sIHRvcEZyYW1lRG9tYWluLCBsYXN0U2Vlbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NT
dG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRp
bmcodGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOwogCiAgICAgICAgIHBv
c3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQogCi12
b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VMb2FkaW5n
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiB0YXJnZXREb21haW4sIGNvbnN0IFJlZ2lzdHJhYmxl
RG9tYWluJiB0b3BGcmFtZURvbWFpbiwgV2FsbFRpbWUgbGFzdFNlZW4sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpsb2dTdWJyZXNvdXJjZUxvYWRpbmcoY29uc3QgU3ViUmVzb3VyY2VEb21h
aW4mIHRhcmdldERvbWFpbiwgY29uc3QgVG9wRnJhbWVEb21haW4mIHRvcEZyYW1lRG9tYWluLCBX
YWxsVGltZSBsYXN0U2VlbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIHBvc3RUYXNrKFt0aGlzLCB0YXJnZXREb21haW4gPSB0YXJnZXREb21h
aW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0
ZWRDb3B5KCksIGxhc3RTZWVuLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAg
ICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJlc291cmNlTG9hZGluZyh0YXJnZXREb21haW4s
IHRvcEZyYW1lRG9tYWluLCBsYXN0U2Vlbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9y
ZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5sb2dTdWJyZXNvdXJjZUxvYWRpbmco
dGFyZ2V0RG9tYWluLCB0b3BGcmFtZURvbWFpbiwgbGFzdFNlZW4pOwogCiAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwpAQCAtNTA1LDkg
KzUyNSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpsb2dTdWJyZXNv
dXJjZUxvYWRpbmcoY29uc3QgUmVnaXN0cmFibGVEb21hCiB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6bG9nU3VicmVzb3VyY2VSZWRpcmVjdChjb25zdCBSZWdpc3RyYWJsZURv
bWFpbiYgc291cmNlRG9tYWluLCBjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgdGFyZ2V0RG9tYWlu
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAg
cG9zdFRhc2soW3RoaXMsIHNvdXJjZURvbWFpbiA9IHNvdXJjZURvbWFpbi5pc29sYXRlZENvcHko
KSwgdGFyZ2V0RG9tYWluID0gdGFyZ2V0RG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAg
ICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPmxvZ1N1YnJl
c291cmNlUmVkaXJlY3Qoc291cmNlRG9tYWluLCB0YXJnZXREb21haW4pOwotCisgICAgICAgIGlm
IChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5sb2dT
dWJyZXNvdXJjZVJlZGlyZWN0KHNvdXJjZURvbWFpbiwgdGFyZ2V0RG9tYWluKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBA
IC01MTcsOCArNTM2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6Omxv
Z1VzZXJJbnRlcmFjdGlvbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5p
c29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAg
ICBtX21lbW9yeVN0b3JlLT5sb2dVc2VySW50ZXJhY3Rpb24oZG9tYWluKTsKKyAgICAgICAgaWYg
KG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmxvZ1Vz
ZXJJbnRlcmFjdGlvbihkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTUyOCw4ICs1NDcsOCBAQCB2b2lkIFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6Y2xlYXJVc2VySW50ZXJhY3Rpb24oY29uc3Qg
UmVnaXN0cmFibGVEb21haQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAg
ICAgcG9zdFRhc2soW3RoaXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVh
clVzZXJJbnRlcmFjdGlvbihkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
CisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+Y2xlYXJVc2VySW50ZXJhY3Rpb24oZG9t
YWluKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgfSk7CiB9CkBAIC01MzcsNyArNTU2LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OmNsZWFyVXNlckludGVyYWN0aW9uKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWkK
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpoYXNIYWRVc2VySW50ZXJhY3Rp
b24oY29uc3QgUmVnaXN0cmFibGVEb21haW4mIGRvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBwb3N0VGFzayhbdGhpcywgZG9t
YWluLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1fbWVtb3J5U3RvcmUg
PyBtX21lbW9yeVN0b3JlLT5oYXNIYWRVc2VySW50ZXJhY3Rpb24oZG9tYWluKSA6IGZhbHNlOwor
ICAgICAgICBib29sIGhhZFVzZXJJbnRlcmFjdGlvbiA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9z
dGF0aXN0aWNzU3RvcmUtPmhhc0hhZFVzZXJJbnRlcmFjdGlvbihkb21haW4pIDogZmFsc2U7CiAg
ICAgICAgIHBvc3RUYXNrUmVwbHkoW2hhZFVzZXJJbnRlcmFjdGlvbiwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKGhhZFVzZXJJbnRlcmFjdGlvbik7CiAgICAgICAgIH0pOwpAQCAt
NTQ5LDggKzU2OCw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRM
YXN0U2Vlbihjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYgZG9tYWluCiAgICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCBzZWNvbmRzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldExhc3RTZWVuKGRvbWFpbiwgc2Vjb25kcyk7
CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGlj
c1N0b3JlLT5zZXRMYXN0U2Vlbihkb21haW4sIHNlY29uZHMpOwogICAgICAgICBwb3N0VGFza1Jl
cGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTU2MCw4ICs1
NzksOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0UHJldmFsZW50
UmVzb3VyY2UoY29uc3QgUmVnaXN0cmFibGVEb21haQogICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29w
eSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11
dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5
U3RvcmUtPnNldFByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRp
c3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRQcmV2YWxlbnRS
ZXNvdXJjZShkb21haW4pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTU3MSw4ICs1OTAsOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGNvbnN0IFJl
Z2lzdHJhYmxlRAogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFz
ayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAo
bV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFZlcnlQcmV2YWxl
bnRSZXNvdXJjZShkb21haW4pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAg
ICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0VmVyeVByZXZhbGVudFJlc291cmNlKGRvbWFp
bik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtNTgyLDcgKzYwMSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpkdW1wUmVzb3VyY2VMb2FkU3RhdGlzdGljcyhDb21wbGV0aW9uSGFuZGxlCiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewot
ICAgICAgICBTdHJpbmcgcmVzdWx0ID0gbV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmR1
bXBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkgOiBlbXB0eVN0cmluZygpOworICAgICAgICBTdHJp
bmcgcmVzdWx0ID0gbV9zdGF0aXN0aWNzU3RvcmUgPyBtX3N0YXRpc3RpY3NTdG9yZS0+ZHVtcFJl
c291cmNlTG9hZFN0YXRpc3RpY3MoKSA6IGVtcHR5U3RyaW5nKCk7CiAgICAgICAgIHBvc3RUYXNr
UmVwbHkoW3Jlc3VsdCA9IHJlc3VsdC5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CiAgICAgICAgIH0pOwpAQCAtNTk0LDcgKzYxMyw3IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ByZXZhbGVudFJlc291cmNl
KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
ICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBib29sIGlzUHJldmFsZW50UmVzb3VyY2UgPSBtX21lbW9yeVN0b3JlID8g
bV9tZW1vcnlTdG9yZS0+aXNQcmV2YWxlbnRSZXNvdXJjZShkb21haW4pIDogZmFsc2U7CisgICAg
ICAgIGJvb2wgaXNQcmV2YWxlbnRSZXNvdXJjZSA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0
aXN0aWNzU3RvcmUtPmlzUHJldmFsZW50UmVzb3VyY2UoZG9tYWluKSA6IGZhbHNlOwogICAgICAg
ICBwb3N0VGFza1JlcGx5KFtpc1ByZXZhbGVudFJlc291cmNlLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoaXNQcmV2YWxlbnRSZXNvdXJjZSk7CiAgICAgICAgIH0pOwpAQCAtNjA2
LDcgKzYyNSw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1ZlcnlQ
cmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURvCiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywgZG9tYWluID0gZG9tYWluLmlz
b2xhdGVkQ29weSgpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzVmVyeVByZXZhbGVudFJlc291cmNlID0g
bV9tZW1vcnlTdG9yZSA/IG1fbWVtb3J5U3RvcmUtPmlzVmVyeVByZXZhbGVudFJlc291cmNlKGRv
bWFpbikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1ZlcnlQcmV2YWxlbnRSZXNvdXJjZSA9IG1f
c3RhdGlzdGljc1N0b3JlID8gbV9zdGF0aXN0aWNzU3RvcmUtPmlzVmVyeVByZXZhbGVudFJlc291
cmNlKGRvbWFpbikgOiBmYWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNWZXJ5UHJldmFs
ZW50UmVzb3VyY2UsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1ZlcnlQcmV2
YWxlbnRSZXNvdXJjZSk7CiAgICAgICAgIH0pOwpAQCAtNjE4LDcgKzYzNyw4IEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjppc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5k
ZXIoY29uc3QgUmVnaXN0CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBv
c3RUYXNrKFt0aGlzLCBzdWJyZXNvdXJjZURvbWFpbiA9IHN1YnJlc291cmNlRG9tYWluLmlzb2xh
dGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWluLmlzb2xhdGVkQ29weSgp
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewotICAgICAgICBib29sIGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fbWVt
b3J5U3RvcmUgPyBtX21lbW9yeVN0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIo
c3VicmVzb3VyY2VEb21haW4sIHRvcEZyYW1lRG9tYWluKSA6IGZhbHNlOworICAgICAgICBib29s
IGlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlciA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9z
dGF0aXN0aWNzU3RvcmUtPmlzUmVnaXN0ZXJlZEFzU3VicmVzb3VyY2VVbmRlcihzdWJyZXNvdXJj
ZURvbWFpbiwgdG9wRnJhbWVEb21haW4pCisgICAgICAgICAgICA6IGZhbHNlOwogICAgICAgICBw
b3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1N1YnJlc291cmNlVW5kZXIpOwog
ICAgICAgICB9KTsKQEAgLTYzMCw3ICs2NTAsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRp
c3RpY3NTdG9yZTo6aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKGNvbnN0IFJlZ2lzdHJhYgog
ICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgc3Vi
RnJhbWVEb21haW4gPSBzdWJGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgdG9wRnJhbWVEb21h
aW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1Jl
Z2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBtX21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+
aXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVyKHN1YkZyYW1lRG9tYWluLCB0b3BGcmFtZURvbWFp
bikgOiBmYWxzZTsKKyAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1N1YkZyYW1lVW5kZXIgPSBt
X3N0YXRpc3RpY3NTdG9yZSA/IG1fc3RhdGlzdGljc1N0b3JlLT5pc1JlZ2lzdGVyZWRBc1N1YkZy
YW1lVW5kZXIoc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKQorICAgICAgICAgICAgOiBm
YWxzZTsKICAgICAgICAgcG9zdFRhc2tSZXBseShbaXNSZWdpc3RlcmVkQXNTdWJGcmFtZVVuZGVy
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFi
bGUgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoaXNSZWdpc3RlcmVkQXNTdWJGcmFt
ZVVuZGVyKTsKICAgICAgICAgfSk7CkBAIC02NDIsNyArNjYzLDggQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmlzUmVnaXN0ZXJlZEFzUmVkaXJlY3RpbmdUbyhjb25zdCBS
ZWdpc3RyYWIKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpblJlZGlyZWN0ZWRGcm9tID0gZG9tYWluUmVkaXJlY3RlZEZyb20uaXNvbGF0
ZWRDb3B5KCksIGRvbWFpblJlZGlyZWN0ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRl
ZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKLSAgICAgICAgYm9vbCBpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8gPSBt
X21lbW9yeVN0b3JlID8gbV9tZW1vcnlTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1Rv
KGRvbWFpblJlZGlyZWN0ZWRGcm9tLCBkb21haW5SZWRpcmVjdGVkVG8pIDogZmFsc2U7CisgICAg
ICAgIGJvb2wgaXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvID0gbV9zdGF0aXN0aWNzU3RvcmUg
PyBtX3N0YXRpc3RpY3NTdG9yZS0+aXNSZWdpc3RlcmVkQXNSZWRpcmVjdGluZ1RvKGRvbWFpblJl
ZGlyZWN0ZWRGcm9tLCBkb21haW5SZWRpcmVjdGVkVG8pCisgICAgICAgICAgICA6IGZhbHNlOwog
ICAgICAgICBwb3N0VGFza1JlcGx5KFtpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8sIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihpc1JlZ2lzdGVyZWRBc1JlZGlyZWN0aW5nVG8p
OwogICAgICAgICB9KTsKQEAgLTY1NCw4ICs2NzYsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6Y2xlYXJQcmV2YWxlbnRSZXNvdXJjZShjb25zdCBSZWdpc3RyYWJsZURv
bQogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3Ro
aXMsIGRvbWFpbiA9IGRvbWFpbi5pc29sYXRlZENvcHkoKSwgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVt
b3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5jbGVhclByZXZhbGVudFJlc291
cmNlKGRvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT5jbGVhclByZXZhbGVudFJlc291cmNlKGRvbWFpbik7CiAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwog
fQpAQCAtNjY1LDggKzY4Nyw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3Jl
OjpzZXRHcmFuZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkCiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBkb21haW4gPSBkb21h
aW4uaXNvbGF0ZWRDb3B5KCksIHZhbHVlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldEdyYW5kZmF0aGVyZWQoZG9tYWluLCB2YWx1
ZSk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlz
dGljc1N0b3JlLT5zZXRHcmFuZGZhdGhlcmVkKGRvbWFpbiwgdmFsdWUpOwogICAgICAgICBwb3N0
VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTY3
Niw3ICs2OTgsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6aXNHcmFu
ZGZhdGhlcmVkKGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiBkbwogICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgZG9tYWluID0gZG9tYWluLmlzb2xhdGVkQ29weSgp
XSgpIG11dGFibGUgewotICAgICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9IG1fbWVtb3J5U3Rv
cmUgPyBtX21lbW9yeVN0b3JlLT5pc0dyYW5kZmF0aGVyZWQoZG9tYWluKSA6IGZhbHNlOworICAg
ICAgICBib29sIGlzR3JhbmRGYXRoZXJlZCA9IG1fc3RhdGlzdGljc1N0b3JlID8gbV9zdGF0aXN0
aWNzU3RvcmUtPmlzR3JhbmRmYXRoZXJlZChkb21haW4pCisgICAgICAgICAgICA6IGZhbHNlOwog
ICAgICAgICBwb3N0VGFza1JlcGx5KFtpc0dyYW5kRmF0aGVyZWQsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihpc0dyYW5kRmF0aGVyZWQpOwogICAgICAgICB9KTsKQEAgLTY4OCw4
ICs3MTEsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0U3ViZnJh
bWVVbmRlclRvcEZyYW1lRG9tYWluKGNvbnN0IFJlZ2lzdAogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7CiAgICAgCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIHN1YkZyYW1lRG9tYWluID0gc3ViRnJhbWVEb21h
aW4uaXNvbGF0ZWRDb3B5KCksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0
ZWRDb3B5KCldKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0U3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWluKHN1YkZy
YW1lRG9tYWluLCB0b3BGcmFtZURvbWFpbik7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9y
ZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRTdWJmcmFtZVVuZGVyVG9wRnJh
bWVEb21haW4oc3ViRnJhbWVEb21haW4sIHRvcEZyYW1lRG9tYWluKTsKICAgICAgICAgcG9zdFRh
c2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC02OTks
OCArNzIyLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZURvbWFpbihjb25zdCBSZWcKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBzdWJyZXNvdXJjZURvbWFpbiA9IHN1YnJlc291
cmNlRG9tYWluLmlzb2xhdGVkQ29weSgpLCB0b3BGcmFtZURvbWFpbiA9IHRvcEZyYW1lRG9tYWlu
Lmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkK
LSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURv
bWFpbihzdWJyZXNvdXJjZURvbWFpbiwgdG9wRnJhbWVEb21haW4pOworICAgICAgICBpZiAobV9z
dGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0U3VicmVz
b3VyY2VVbmRlclRvcEZyYW1lRG9tYWluKHN1YnJlc291cmNlRG9tYWluLCB0b3BGcmFtZURvbWFp
bik7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwogfQpAQCAtNzEwLDggKzczMyw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0VG8oY29uc3QgUmVnaXN0CiAg
ICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICAKICAgICBwb3N0VGFzayhbdGhpcywg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgc3VicmVzb3Vy
Y2VEb21haW4gPSBzdWJyZXNvdXJjZURvbWFpbi5pc29sYXRlZENvcHkoKSwgZG9tYWluUmVkaXJl
Y3RlZFRvID0gZG9tYWluUmVkaXJlY3RlZFRvLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewot
ICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNl
dFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWluUmVk
aXJlY3RlZFRvKTsKKyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAg
bV9zdGF0aXN0aWNzU3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RUbyhzdWJyZXNv
dXJjZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZFRvKTsKICAgICAgICAgcG9zdFRhc2tSZXBseShX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC03MjEsOCArNzQ0LDgg
QEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldFN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RGcm9tKGNvbnN0IFJlZ2kKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwogICAgIAogICAgIHBvc3RUYXNrKFt0aGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBzdWJyZXNvdXJjZURvbWFpbiA9IHN1YnJlc291cmNlRG9tYWlu
Lmlzb2xhdGVkQ29weSgpLCBkb21haW5SZWRpcmVjdGVkRnJvbSA9IGRvbWFpblJlZGlyZWN0ZWRG
cm9tLmlzb2xhdGVkQ29weSgpXSgpIG11dGFibGUgewotICAgICAgICBpZiAobV9tZW1vcnlTdG9y
ZSkKLSAgICAgICAgICAgIG1fbWVtb3J5U3RvcmUtPnNldFN1YnJlc291cmNlVW5pcXVlUmVkaXJl
Y3RGcm9tKHN1YnJlc291cmNlRG9tYWluLCBkb21haW5SZWRpcmVjdGVkRnJvbSk7CisgICAgICAg
IGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5z
ZXRTdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0RnJvbShzdWJyZXNvdXJjZURvbWFpbiwgZG9tYWlu
UmVkaXJlY3RlZEZyb20pOwogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICB9KTsKIH0KQEAgLTczMiw4ICs3NTUsOCBAQCB2b2lkIFdlYlJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2V0VG9wRnJhbWVVbmlxdWVSZWRpcmVjdFRvKGNvbnN0
IFJlZ2lzdHJhYgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgCiAgICAgcG9z
dFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIHRvcEZyYW1lRG9tYWluID0gdG9wRnJhbWVEb21haW4uaXNvbGF0ZWRDb3B5KCksIGRvbWFp
blJlZGlyZWN0ZWRUbyA9IGRvbWFpblJlZGlyZWN0ZWRUby5pc29sYXRlZENvcHkoKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0
b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVEb21haW4sIGRvbWFpblJl
ZGlyZWN0ZWRUbyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAg
IG1fc3RhdGlzdGljc1N0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0VG8odG9wRnJhbWVE
b21haW4sIGRvbWFpblJlZGlyZWN0ZWRUbyk7CiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtNzQzLDggKzc2Niw4IEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUb3BGcmFtZVVuaXF1ZVJlZGly
ZWN0RnJvbShjb25zdCBSZWdpc3RyCiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAg
ICAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgdG9wRnJhbWVEb21haW4gPSB0b3BGcmFtZURvbWFpbi5pc29sYXRlZENv
cHkoKSwgZG9tYWluUmVkaXJlY3RlZEZyb20gPSBkb21haW5SZWRpcmVjdGVkRnJvbS5pc29sYXRl
ZENvcHkoKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRUb3BGcmFtZVVuaXF1ZVJlZGlyZWN0RnJvbSh0b3BGcmFt
ZURvbWFpbiwgZG9tYWluUmVkaXJlY3RlZEZyb20pOworICAgICAgICBpZiAobV9zdGF0aXN0aWNz
U3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3RpY3NTdG9yZS0+c2V0VG9wRnJhbWVVbmlxdWVS
ZWRpcmVjdEZyb20odG9wRnJhbWVEb21haW4sIGRvbWFpblJlZGlyZWN0ZWRGcm9tKTsKICAgICAg
ICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9
CkBAIC03NTUsMTMgKzc3OCwxNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZTo6c2NoZWR1bGVDb29raWVCbG9ja2luZ1VwZGF0ZShDb21wbGV0aW9uSGFuZAogICAgIEFTU0VS
VChSdW5Mb29wOjppc01haW4oKSk7CiAKICAgICBwb3N0VGFzayhbdGhpcywgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAg
aWYgKCFtX21lbW9yeVN0b3JlKSB7CisgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUpIHsK
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIG1fbWVtb3J5U3RvcmUtPnVw
ZGF0ZUNvb2tpZUJsb2NraW5nKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpXSgpIG11dGFibGUgeworCisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9y
ID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tS
ZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOworICAgICAgICAK
KyAgICAgICAgaWYgKG1fc3RhdGlzdGljc1N0b3JlKQorICAgICAgICAgICAgbV9zdGF0aXN0aWNz
U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nKFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTc3MCwxNCAr
Nzk3LDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNv
b2tpZUJsb2NraW5nVXBkYXRlRm9yRG9tYWlucyhjb25zCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHVzZWQgYnkgdGVzdGluZyBzeXN0ZW0uIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBt
YWluIHRocmVhZC4KICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNr
KFt0aGlzLCBkb21haW5zVG9CbG9jayA9IGNyb3NzVGhyZWFkQ29weShkb21haW5zVG9CbG9jayks
IGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3RhdGlz
dGljc1N0b3JlKSB7CiAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1f
bWVtb3J5U3RvcmUtPnVwZGF0ZUNvb2tpZUJsb2NraW5nRm9yRG9tYWlucyhkb21haW5zVG9CbG9j
aywgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0
YWJsZSB7CisgICAgICAgIGF1dG8gY2FsbGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdh
dG9yOjpjcmVhdGUoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildICgpIG11dGFibGUgewogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIH0pOworCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NT
dG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT51cGRhdGVDb29raWVCbG9ja2lu
Z0ZvckRvbWFpbnMoZG9tYWluc1RvQmxvY2ssIFtjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFj
a0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAgICAgfSk7CiB9CiAKQEAgLTc4NiwxNCAr
ODE2LDE3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoY29uc3QKICAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dXNlZCBieSB0ZXN0aW5nIHN5c3RlbS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gdGhlIG1h
aW4gdGhyZWFkLgogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgcG9zdFRhc2so
W3RoaXMsIGRvbWFpbnMgPSBjcm9zc1RocmVhZENvcHkoZG9tYWlucyksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
ICghbV9tZW1vcnlTdG9yZSkgeworICAgICAgICBpZiAoIW1fc3RhdGlzdGljc1N0b3JlKSB7CiAg
ICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIG1fbWVtb3J5U3RvcmUtPmNs
ZWFyQmxvY2tpbmdTdGF0ZUZvckRvbWFpbnMoZG9tYWlucywgW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgIGF1dG8gY2Fs
bGJhY2tBZ2dyZWdhdG9yID0gQ2FsbGJhY2tBZ2dyZWdhdG9yOjpjcmVhdGUoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11dGFibGUgewogICAgICAg
ICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAg
IH0pOworCisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3Rh
dGlzdGljc1N0b3JlLT5jbGVhckJsb2NraW5nU3RhdGVGb3JEb21haW5zKGRvbWFpbnMsIFtjYWxs
YmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJlZigpXSgpIHsgfSk7CiAg
ICAgfSk7CiB9CiAKQEAgLTgwNCwyMiArODM3LDI3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdy
CiAgICAgICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQogICAgICAgICAgICAgbV9wZXJzaXN0
ZW50U3RvcmFnZS0+Y2xlYXIoKTsKIAotICAgICAgICBDb21wbGV0aW9uSGFuZGxlckNhbGxpbmdT
Y29wZSBjb21wbGV0aW9uSGFuZGxlckNhbGxlcihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX3N0YXRpc3Rp
Y3NTdG9yZSkgeworICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNob3VsZEdy
YW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNj
aGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQgQmVmb3JlIGJlaW5nIGNsZWFyZWQsIG1f
c3RhdGlzdGljc1N0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4i
KTsKKworICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNhbGxi
YWNrQWdncmVnYXRvciA9IENhbGxiYWNrQWdncmVnYXRvcjo6Y3JlYXRlKFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAg
ICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICB9
KTsKIAotICAgICAgICBpZiAobV9tZW1vcnlTdG9yZSkgewotICAgICAgICAgICAgbV9tZW1vcnlT
dG9yZS0+Y2xlYXIoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYo
KSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlckNhbGxlcildICgpIG11dGFibGUgeworICAgICAgICBpZiAobV9zdGF0
aXN0aWNzU3RvcmUpIHsKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5jbGVhcihbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29weVJlZigpLCBzaG91bGRHcmFuZGZh
dGhlciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tBZ2dyZWdhdG9yLmNvcHlSZWYoKV0g
KCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09IFNo
b3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX21lbW9yeVN0b3JlKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+
Z3JhbmRmYXRoZXJFeGlzdGluZ1dlYnNpdGVEYXRhKGNvbXBsZXRpb25IYW5kbGVyQ2FsbGVyLnJl
bGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5ncmFuZGZhdGhlckV4aXN0
aW5nV2Vic2l0ZURhdGEoW2NhbGxiYWNrQWdncmVnYXRvciA9IFdURk1vdmUoY2FsbGJhY2tBZ2dy
ZWdhdG9yKV0oKSBtdXRhYmxlIHsgfSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBl
cnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xlYXJlZCwgbV9tZW1vcnlTdG9yZSBpcyBudWxsIHdoZW4g
dHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0xPRyhSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEFmdGVyIGJlaW5n
IGNsZWFyZWQsIG1fc3RhdGlzdGljc1N0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRm
YXRoZXIgZGF0YS4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBTaG91bGRH
cmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0xPRyhS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpz
Y2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IEJlZm9yZSBiZWluZyBjbGVhcmVkLCBt
X21lbW9yeVN0b3JlIGlzIG51bGwgd2hlbiB0cnlpbmcgdG8gZ3JhbmRmYXRoZXIgZGF0YS4iKTsK
ICAgICAgICAgfQogICAgIH0pOwogfQpAQCAtODM3LDggKzg3NSw4IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKFNlY29u
ZHMgc2Vjb25kCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKICAgICBwb3N0VGFz
ayhbdGhpcywgc2Vjb25kcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAg
ICAgICBtX21lbW9yeVN0b3JlLT5zZXRUaW1lVG9MaXZlVXNlckludGVyYWN0aW9uKHNlY29uZHMp
OworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0YXRpc3Rp
Y3NTdG9yZS0+c2V0VGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbihzZWNvbmRzKTsKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBA
IC04NDcsOCArODg1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNl
dE1pbmltdW1UaW1lQmV0d2VlbkRhdGFSZWNvcmRzUmVtb3ZhbChTZWMKIHsKICAgICBBU1NFUlQo
UnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAg
ICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CisgICAgICAgIGlm
IChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRN
aW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwoc2Vjb25kcyk7CiAKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC04
NTgsOCArODk2LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNldEdy
YW5kZmF0aGVyaW5nVGltZShTZWNvbmRzIHNlY29uZHMsIENvbXAKIHsKICAgICBBU1NFUlQoUnVu
TG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBzZWNvbmRzLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgIHsKLSAgICAg
ICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBtX21lbW9yeVN0b3JlLT5zZXRHcmFu
ZGZhdGhlcmluZ1RpbWUoc2Vjb25kcyk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkK
KyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5zZXRHcmFuZGZhdGhlcmluZ1RpbWUoc2Vj
b25kcyk7CiAKICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgfSk7CkBAIC05MDMsOCArOTQxLDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OnNldE1heFN0YXRpc3RpY3NFbnRyaWVzKHNpemVfdCBtYXhpbXVtRW50cnkK
IHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwogICAgIHBvc3RUYXNrKFt0aGlzLCBt
YXhpbXVtRW50cnlDb3VudCwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oKSBtdXRhYmxlICB7Ci0gICAgICAgIGlmIChtX21lbW9yeVN0b3JlKQotICAgICAg
ICAgICAgbV9tZW1vcnlTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobWF4aW11bUVudHJ5
Q291bnQpOworICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICBtX3N0
YXRpc3RpY3NTdG9yZS0+c2V0TWF4U3RhdGlzdGljc0VudHJpZXMobWF4aW11bUVudHJ5Q291bnQp
OwogCiAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgIH0pOwpAQCAtOTE1LDggKzk1Myw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlOjpzZXRQcnVuZUVudHJpZXNEb3duVG8oc2l6ZV90IHBydW5lVGFyZ2V0Q291CiAgICAg
QVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIHBvc3RUYXNrKFt0aGlzLCBwcnVuZVRh
cmdldENvdW50LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XSgpIG11dGFibGUgIHsKLSAgICAgICAgaWYgKG1fbWVtb3J5U3RvcmUpCi0gICAgICAgICAgICBt
X21lbW9yeVN0b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8ocHJ1bmVUYXJnZXRDb3VudCk7Cisg
ICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0
b3JlLT5zZXRQcnVuZUVudHJpZXNEb3duVG8ocHJ1bmVUYXJnZXRDb3VudCk7CiAKICAgICAgICAg
cG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CkBAIC05
MjcsOCArOTY1LDggQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnJlc2V0
UGFyYW1ldGVyc1RvRGVmYXVsdFZhbHVlcyhDb21wbGV0aW9uSGEKICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOwogCiAgICAgcG9zdFRhc2soW3RoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmIChtX21l
bW9yeVN0b3JlKQotICAgICAgICAgICAgbV9tZW1vcnlTdG9yZS0+cmVzZXRQYXJhbWV0ZXJzVG9E
ZWZhdWx0VmFsdWVzKCk7CisgICAgICAgIGlmIChtX3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAg
ICAgIG1fc3RhdGlzdGljc1N0b3JlLT5yZXNldFBhcmFtZXRlcnNUb0RlZmF1bHRWYWx1ZXMoKTsK
IAogICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaAppbmRl
eCAwNjM0Mzg1YzEwYjMyNDE4NDEyODhmZjg0MTkxZDkyODI1OThiOGQxLi4wYTFhMzAzY2RmODY1
MzI2ZDI4MWM5MTViYmY0MmRmZGM1ZjdlZTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgK
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oCkBAIC01Miw3ICs1Miw3IEBAIGVudW0gY2xhc3MgU2hvdWxk
U2FtcGxlIDogYm9vbDsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBOZXR3b3JrU2Vzc2lv
bjsKLWNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9yZTsKK2NsYXNzIFJlc291
cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTsKIGNsYXNzIFJlc291cmNlTG9hZFN0YXRpc3RpY3NQZXJz
aXN0ZW50U3RvcmFnZTsKIGNsYXNzIFdlYkZyYW1lUHJveHk7CiBjbGFzcyBXZWJQcm9jZXNzUHJv
eHk7CkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYWtQdHI8TmV0d29ya1Nl
c3Npb24+IG1fbmV0d29ya1Nlc3Npb247CiAgICAgUmVmPFdvcmtRdWV1ZT4gbV9zdGF0aXN0aWNz
UXVldWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlT
dG9yZT4gbV9tZW1vcnlTdG9yZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlPiBtX3N0YXRpc3RpY3NTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlPiBtX3BlcnNpc3RlbnRTdG9yYWdl
OwogCiAgICAgUnVuTG9vcDo6VGltZXI8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBt
X2RhaWx5VGFza3NUaW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKaW5kZXggNTVjYmFiODY0ZmVlYjljY2U4MzRiNGZhZGQ5YzQwMDIzYjRi
OTIyMC4uZmFjZGZkNWQ5MGQ0NzAzMGMwYzY3OWFhMDU3ODFjY2JiODZkMzBiZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTcyLDYg
KzcyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW50
aW1lQXBwbGljYXRpb25DaGVja3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjaGVtZVJlZ2lzdHJ5Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbkRhdGEuaD4KICNpbmNsdWRlIDx3dGYvQWxnb3JpdGht
cy5oPgpAQCAtMzA5LDYgKzMxMCw4IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVO
ZXR3b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgaWYg
KHBhcmFtZXRlcnMuc2hvdWxkVXNlVGVzdGluZ05ldHdvcmtTZXNzaW9uKQogICAgICAgICBzd2l0
Y2hUb05ld1Rlc3RpbmdTZXNzaW9uKCk7CiAKKyAgICBXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldElzSVRQRGF0YWJhc2VFbmFibGVkKHBhcmFtZXRl
cnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UpOworCiAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y29u
c3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMubmV0
d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnlFeHRl
bnNpb25IYW5kbGUpOwogCiAgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zZXNzaW9uSUQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCmluZGV4IGM2ZGYwOGU5ZmI3NzY2Zjc3MGFm
YWRlZjFhYTdmMjEyOTQ5ZDFmNTUuLjA4NzE1MGExZDUyMWE1MjRlY2JkOGI1ZDlhMWI0ODYzYWYx
NmE1MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCkBAIC05Myw2ICs5Myw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnM6OmVuY29kZShJUEM6OkVu
Y29kZXImIGVuY29kZXIpIGNvbnN0CiAjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQogICAgIGVu
Y29kZXIgPDwgc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSA8PCBzZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlIDw8IHVybFNjaGVtZXNTZXJ2
aWNlV29ya2Vyc0NhbkhhbmRsZSA8PCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NU
ZXJtaW5hdGlvbkRlbGF5OwogI2VuZGlmCisgICAgZW5jb2RlciA8PCBzaG91bGRFbmFibGVJVFBE
YXRhYmFzZTsKIH0KIAogYm9vbCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlciwgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnMmIHJlc3VsdCkKQEAgLTIxNyw2ICsyMTgsOSBAQCBib29sIE5ldHdvcmtQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBOZXR3b3JrUHJvYwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnNob3VsZEVuYWJsZUlUUERhdGFiYXNlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaAppbmRl
eCAyZmQzYmU5ZmRlZDk4MGI3NTczY2UzYjUxNmIwN2E5NmZhZGFmNzNiLi5mYzkwMGMyZWQ3ZjBj
ZWZiMTgyOTBjNDBmODAzNWNjZmU1ZDk3OGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVy
cy5oCkBAIC0xMTEsNiArMTExLDcgQEAgc3RydWN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzIHsKICAgICBWZWN0b3I8U3RyaW5nPiB1cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5I
YW5kbGU7CiAgICAgYm9vbCBzaG91bGREaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5h
dGlvbkRlbGF5IHsgZmFsc2UgfTsKICNlbmRpZgorICAgIGJvb2wgc2hvdWxkRW5hYmxlSVRQRGF0
YWJhc2UgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXIuY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAppbmRleCBmMWVhNzkyOWQ1MzA3ZjA1ZGMw
NjgwZjY0NzU0YTY5ZjgzZTk4NTZiLi5iNDQ5MmE0ZDI0OWZjOTdkY2E4YWEzZDMyM2QzNTI3OWJh
ZjZkN2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllci5jcHAKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcs
NyArNDcsMTIgQEAgUmVzb3VyY2VMb2FkUHJldmFsZW5jZSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
Q2xhc3NpZmllcjo6Y2FsY3VsYXRlUmVzb3VyY2VQcmV2YWwKICAgICBhdXRvIHN1YnJlc291cmNl
VW5pcXVlUmVkaXJlY3RzVG9Db3VudCA9IHJlc291cmNlU3RhdGlzdGljLnN1YnJlc291cmNlVW5p
cXVlUmVkaXJlY3RzVG8uc2l6ZSgpOwogICAgIGF1dG8gc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9t
YWluc0NvdW50ID0gcmVzb3VyY2VTdGF0aXN0aWMuc3ViZnJhbWVVbmRlclRvcEZyYW1lRG9tYWlu
cy5zaXplKCk7CiAgICAgYXV0byB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQgPSByZXNv
dXJjZVN0YXRpc3RpYy50b3BGcmFtZVVuaXF1ZVJlZGlyZWN0c1RvLnNpemUoKTsKLSAgICAKKwor
ICAgIHJldHVybiBjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2Uoc3VicmVzb3VyY2VVbmRlclRv
cEZyYW1lRG9tYWluc0NvdW50LCBzdWJyZXNvdXJjZVVuaXF1ZVJlZGlyZWN0c1RvQ291bnQsIHN1
YmZyYW1lVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgdG9wRnJhbWVVbmlxdWVSZWRpcmVjdHNU
b0NvdW50LCBjdXJyZW50UHJldmFsZW5jZSk7Cit9CisKK1Jlc291cmNlTG9hZFByZXZhbGVuY2Ug
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXI6OmNhbGN1bGF0ZVJlc291cmNlUHJldmFs
ZW5jZSh1bnNpZ25lZCBzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQsIHVuc2ln
bmVkIHN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgdW5zaWduZWQgc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50LCB1bnNpZ25lZCB0b3BGcmFtZVVuaXF1ZVJlZGlyZWN0
c1RvQ291bnQsIFJlc291cmNlTG9hZFByZXZhbGVuY2UgY3VycmVudFByZXZhbGVuY2UpCit7CiAg
ICAgaWYgKCFzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVEb21haW5zQ291bnQKICAgICAgICAgJiYg
IXN1YnJlc291cmNlVW5pcXVlUmVkaXJlY3RzVG9Db3VudAogICAgICAgICAmJiAhc3ViZnJhbWVV
bmRlclRvcEZyYW1lRG9tYWluc0NvdW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
Zmllci5oCmluZGV4IGFjZjFmMzg5ZGQ1MWEwMGM1MTA3ZGM2NzJmOWQzZmJhOWYyYmZlZjAuLjU4
ZjU2NWExMWE3NzM1ZDA0MTI5M2NhYmY0MWMyNWJjNjU1ZDE5NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3Np
Zmllci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2xhc3NpZmllci9SZXNvdXJjZUxv
YWRTdGF0aXN0aWNzQ2xhc3NpZmllci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTctMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDEwICs0MiwxMSBAQCBwdWJsaWM6CiAgICAgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIoKSA9IGRlZmF1bHQ7CiAgICAgdmlydHVhbCB+
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIoKSA9IGRlZmF1bHQ7CiAgICAgUmVzb3Vy
Y2VMb2FkUHJldmFsZW5jZSBjYWxjdWxhdGVSZXNvdXJjZVByZXZhbGVuY2UoY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljcyYgcmVzb3VyY2VTdGF0aXN0aWMsIFJlc291cmNlTG9h
ZFByZXZhbGVuY2UgY3VycmVudFByZXZhbGVuY2UpOworICAgIFJlc291cmNlTG9hZFByZXZhbGVu
Y2UgY2FsY3VsYXRlUmVzb3VyY2VQcmV2YWxlbmNlKHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnNDb3VudCwgdW5zaWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
b0NvdW50LCB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQsIHVuc2ln
bmVkIHRvcEZyYW1lVW5pcXVlUmVkaXJlY3RzVG9Db3VudCwgUmVzb3VyY2VMb2FkUHJldmFsZW5j
ZSBjdXJyZW50UHJldmFsZW5jZSk7CiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIGNsYXNz
aWZ5KHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgdW5zaWdu
ZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCB1bnNpZ25lZCBzdWJmcmFtZVVu
ZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpCisgICAgdmlydHVhbCBib29sIGNsYXNzaWZ5KHVuc2ln
bmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgdW5zaWduZWQgc3VicmVz
b3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJh
bWVPcmlnaW5zQ291bnQpCiAgICAgewotICAgICAgICByZXR1cm4gY2xhc3NpZnlXaXRoVmVjdG9y
VGhyZXNob2xkKHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgc3VicmVzb3Vy
Y2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291
bnQpOworICAgICAgICByZXR1cm4gY2xhc3NpZnlXaXRoVmVjdG9yVGhyZXNob2xkKHN1YnJlc291
cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNU
b0NvdW50LCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpOwogICAgIH0KICAgICBi
b29sIGNsYXNzaWZ5V2l0aFZlY3RvclRocmVzaG9sZCh1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2ln
bmVkKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIv
Y29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Ns
YXNzaWZpZXJDb2NvYS5jcHAKaW5kZXggYWNmYmUzY2RiYzFjM2E5NTFmNzIzNzBiZDU5ODdlNDcy
ZThkNGMyNS4uZTFmNTMwNGU5MzIyNjg0ZWM2MDYyNmM2MzAzOTc1ZjIzZDFiOGMwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vY2xhc3NpZmllci9jb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzQ2xhc3NpZmllckNvY29h
LmNwcApAQCAtMzUsMTUgKzM1LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1ib29sIFJl
c291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2E6OmNsYXNzaWZ5KHVuc2lnbmVkIHN1
YnJlc291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgdW5zaWduZWQgc3VicmVzb3VyY2VV
bmlxdWVSZWRpcmVjdHNUb0NvdW50LCB1bnNpZ25lZCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmln
aW5zQ291bnQpCitib29sIFJlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2E6OmNs
YXNzaWZ5KHVuc2lnbmVkIHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCwgdW5z
aWduZWQgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCB1bnNpZ25lZCBzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpCiB7CiAgICAgaWYgKCFjYW5Vc2VDb3JlUHJlZGlj
dGlvbigpKQotICAgICAgICByZXR1cm4gY2xhc3NpZnlXaXRoVmVjdG9yVGhyZXNob2xkKHN1YnJl
c291cmNlVW5kZXJUb3BGcmFtZU9yaWdpbnNDb3VudCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50LCBzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpOworICAgICAgICBy
ZXR1cm4gY2xhc3NpZnlXaXRoVmVjdG9yVGhyZXNob2xkKHN1YnJlc291cmNlVW5kZXJUb3BGcmFt
ZURvbWFpbnNDb3VudCwgc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50LCBzdWJmcmFt
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpOwogCiAgICAgVmVjdG9yPHN2bV9ub2RlPiBmZWF0
dXJlczsKIAotICAgIGlmIChzdWJyZXNvdXJjZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpCi0g
ICAgICAgIGZlYXR1cmVzLmFwcGVuZCh7MSwgc3RhdGljX2Nhc3Q8ZG91YmxlPihzdWJyZXNvdXJj
ZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQpfSk7CisgICAgaWYgKHN1YnJlc291cmNlVW5kZXJU
b3BGcmFtZURvbWFpbnNDb3VudCkKKyAgICAgICAgZmVhdHVyZXMuYXBwZW5kKHsxLCBzdGF0aWNf
Y2FzdDxkb3VibGU+KHN1YnJlc291cmNlVW5kZXJUb3BGcmFtZURvbWFpbnNDb3VudCl9KTsKICAg
ICBpZiAoc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVjdHNUb0NvdW50KQogICAgICAgICBmZWF0dXJl
cy5hcHBlbmQoezIsIHN0YXRpY19jYXN0PGRvdWJsZT4oc3VicmVzb3VyY2VVbmlxdWVSZWRpcmVj
dHNUb0NvdW50KX0pOwogICAgIGlmIChzdWJmcmFtZVVuZGVyVG9wRnJhbWVPcmlnaW5zQ291bnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAppbmRleCBmNTU4NDMyNTkw
ZmJkZWI2ODk3OTNlMGI0OWIyNjc3ODQxNjdkMmVhLi5lMmFlNmE4MTJiNjc4MGE3ZTA4MDQyMjU2
MTJkY2FhYmM5MmUxMDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVm
ZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlh
bWwKQEAgLTEzNzksNiArMTM3OSwxNCBAQCBJdHBEZWJ1Z01vZGVFbmFibGVkOgogICBodW1hblJl
YWRhYmxlRGVzY3JpcHRpb246ICJJbnRlbGxpZ2VudCBUcmFja2luZyBQcmV2ZW50aW9uIERlYnVn
IE1vZGUiCiAgIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCiAKK0lzSVRQ
RGF0YWJhc2VFbmFibGVkOgorICB0eXBlOiBib29sCisgIGRlZmF1bHRWYWx1ZTogZmFsc2UKKyAg
aHVtYW5SZWFkYWJsZU5hbWU6ICJJVFAgRGF0YWJhc2UgQmFja2VuZCIKKyAgaHVtYW5SZWFkYWJs
ZURlc2NyaXB0aW9uOiAiRW5hYmxlIEludGVsbGlnZW50IFRyYWNraW5nIFByZXZlbnRpb24gRGF0
YWJhc2UgQmFja2VuZCIKKyAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMK
KyAgY2F0ZWdvcnk6IGludGVybmFsCisKIFNlcnZpY2VXb3JrZXJzRW5hYmxlZDoKICAgdHlwZTog
Ym9vbAogICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfU0VSVklDRV9XT1JLRVJTX0VOQUJMRUQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CmluZGV4IDc0MDdjYzIxOTAzZTI2NGI4ODQ4Yzg1YTU4OTUwODQ0ZDNkZGFjNDguLjJl
ZmI4ZTU5OGI2ZDQ3ZTIxNzJlYjkzNWJiMjk0NjMwYTNjYzIyM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAt
NDIsOCArNDIsMTAgQEAgTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldFN0cmVhbS5jcHAKIE5l
dHdvcmtQcm9jZXNzL1BpbmdMb2FkLmNwcAogTmV0d29ya1Byb2Nlc3MvUHJlY29ubmVjdFRhc2su
Y3BwCiAKK05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlU3RvcmUuY3BwCiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0
YXRpc3RpY3NNZW1vcnlTdG9yZS5jcHAKIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcAorTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiAKIE5ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4
IDkyOWM1MGUyZTA2MGM2N2RjOWM3YTUxMWYwZjk3NjlmYjhjM2Q5MDguLmY5N2Q3NDAzZTZiNDI2
YjM0ODNhNTNkNmRiYjNhZTEyMmU3YWZlMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTI5
LDYgKzI5LDcgQEAgTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya0RhdGFUYXNrQ29jb2EubW0K
IE5ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KIE5ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtTZXNzaW9uQ29jb2EubW0KIAorTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbQogTmV0d29ya1Byb2Nlc3Mv
Q2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NUZWxlbWV0cnkuY3BwCiAK
QEAgLTMyOSw3ICszMzAsNiBAQCBVSVByb2Nlc3MvQ29jb2EvTWVkaWFDYXB0dXJlVXRpbGl0aWVz
Lm1tCiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCiBVSVByb2Nlc3MvQ29jb2Ev
UGFnZUNsaWVudEltcGxDb2NvYS5tbQogVUlQcm9jZXNzL0NvY29hL1BsYXliYWNrU2Vzc2lvbk1h
bmFnZXJQcm94eS5tbQotVUlQcm9jZXNzL0NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1v
cnlTdG9yZUNvY29hLm1tCiBVSVByb2Nlc3MvQ29jb2EvU2FmZUJyb3dzaW5nV2FybmluZ0NvY29h
Lm1tCiBVSVByb2Nlc3MvQ29jb2EvU2Vzc2lvblN0YXRlQ29kaW5nLm1tCiBVSVByb2Nlc3MvQ29j
b2EvU3lzdGVtUHJldmlld0NvbnRyb2xsZXJDb2NvYS5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0
aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVi
YTYyNzY2NTJlMWRmNmZkYTRkZDhiNTc1NGUzYmYwMWMzNzZkMC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmVDb2NvYS5tbQorKysgL2Rldi9udWxs
CkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZpZy5oIgot
I2ltcG9ydCAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlLmgiCi0KLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNUSUNTKQotCi0jaW1wb3J0IDxXZWJDb3JlL1JlZ2lzdHJh
YmxlRG9tYWluLmg+Ci0jaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW1wb3J0
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXZvaWQgUmVz
b3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlOjpyZWdpc3RlclVzZXJEZWZhdWx0c0lmTmVl
ZGVkKCkKLXsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IGluaXRPbmNlOwotCi0gICAgZGlz
cGF0Y2hfb25jZSgmaW5pdE9uY2UsIF57Ci0gICAgICAgIFNlY29uZHMgdGltZVRvTGl2ZVVzZXJJ
bnRlcmFjdGlvbihbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBkb3VibGVG
b3JLZXk6QCJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGltZVRvTGl2ZVVzZXJJbnRlcmFjdGlvbiJd
KTsKLSAgICAgICAgaWYgKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24gPiAwX3MgJiYgdGltZVRv
TGl2ZVVzZXJJbnRlcmFjdGlvbiA8PSAyNF9oICogMzApCi0gICAgICAgICAgICBzZXRUaW1lVG9M
aXZlVXNlckludGVyYWN0aW9uKHRpbWVUb0xpdmVVc2VySW50ZXJhY3Rpb24pOwotCi0gICAgICAg
IFNlY29uZHMgbWluaW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGRvdWJsZUZvcktleTpAIlJlc291cmNlTG9hZFN0
YXRpc3RpY3NNaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwiXSk7Ci0gICAgICAg
IGlmIChtaW5pbXVtVGltZUJldHdlZW5EYXRhUmVjb3Jkc1JlbW92YWwgPiAwX3MgJiYgbWluaW11
bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsIDwgMV9oKQotICAgICAgICAgICAgc2V0TWlu
aW11bVRpbWVCZXR3ZWVuRGF0YVJlY29yZHNSZW1vdmFsKG1pbmltdW1UaW1lQmV0d2VlbkRhdGFS
ZWNvcmRzUmVtb3ZhbCk7Ci0KLSAgICAgICAgU2Vjb25kcyBncmFuZGZhdGhlcmluZ1RpbWUoW1tO
U1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0dyYW5kZmF0aGVyaW5nVGltZSJdKTsKLSAgICAgICAgaWYgKGdyYW5k
ZmF0aGVyaW5nVGltZSA+IDBfcyAmJiBncmFuZGZhdGhlcmluZ1RpbWUgPD0gMjRfaCAqIDcpCi0g
ICAgICAgICAgICBzZXRHcmFuZGZhdGhlcmluZ1RpbWUoZ3JhbmRmYXRoZXJpbmdUaW1lKTsKLQot
ICAgICAgICBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVidWdNb2RlKFtbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIGJvb2xGb3JLZXk6QCJJdHBEZWJ1Z01vZGUiXSk7Ci0g
ICAgICAgIGF1dG8qIGRlYnVnTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBzdHJpbmdGb3JLZXk6QCJJdHBNYW51YWxQcmV2YWxl
bnRSZXNvdXJjZSJdOwotICAgICAgICBpZiAoZGVidWdNYW51YWxQcmV2YWxlbnRSZXNvdXJjZSkg
ewotICAgICAgICAgICAgVVJMIHVybCB7IFVSTCgpLCBkZWJ1Z01hbnVhbFByZXZhbGVudFJlc291
cmNlIH07Ci0gICAgICAgICAgICBpZiAoIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgICAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJodHRwOi8vIik7Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoZGVidWdN
YW51YWxQcmV2YWxlbnRSZXNvdXJjZSk7Ci0gICAgICAgICAgICAgICAgdXJsID0geyBVUkwoKSwg
YnVpbGRlci50b1N0cmluZygpIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodXJs
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBzZXRQcmV2YWxlbnRSZXNvdXJjZUZvckRlYnVn
TW9kZShSZWdpc3RyYWJsZURvbWFpbiB7IHVybCB9KTsKLSAgICAgICAgfQotCi0gICAgICAgIFNl
Y29uZHMgY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJjZXMoW1tOU1VzZXJEZWZhdWx0
cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0NhY2hlTWF4QWdlQ2FwIl0pOwotICAgICAgICBpZiAoY2FjaGVNYXhBZ2VDYXBGb3JQcmV2
YWxlbnRSZXNvdXJjZXMgPiAwX3MgJiYgY2FjaGVNYXhBZ2VDYXBGb3JQcmV2YWxlbnRSZXNvdXJj
ZXMgPD0gMjRfaCAqIDM2NSkKLSAgICAgICAgICAgIHNldENhY2hlTWF4QWdlQ2FwKGNhY2hlTWF4
QWdlQ2FwRm9yUHJldmFsZW50UmVzb3VyY2VzKTsKLSAgICAgICAgCi0gICAgICAgIFNlY29uZHMg
Y2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZh
dWx0c10gZG91YmxlRm9yS2V5OkAiUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsaWVudFNpZGVDb29r
aWVzQWdlQ2FwIl0pOwotICAgICAgICBpZiAoY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAgPiAwX3Mg
JiYgY2xpZW50U2lkZUNvb2tpZXNBZ2VDYXAgPD0gMjRfaCAqIDM2NSkKLSAgICAgICAgICAgIHNl
dEFnZUNhcEZvckNsaWVudFNpZGVDb29raWVzKGNsaWVudFNpZGVDb29raWVzQWdlQ2FwKTsKLSAg
ICB9KTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCmluZGV4IDk4NzQ2YzM3YzUyNGM4Nzg0Yjdh
NmU4MjY2NzY2NjUxNzVmNmZiMGQuLmIyMDdjZDQyMTE4Nzg1NjMwYjk4OGQ3OGI1YTViYzZlYWY1
YWM1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJv
Y2Vzc1Bvb2xDb2NvYS5tbQpAQCAtMjk2LDYgKzI5Niw4IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25Q
YXJhCiAjaWYgRU5BQkxFKFBST1hJTUlUWV9ORVRXT1JLSU5HKQogICAgIHBhcmFtZXRlcnMud2ly
ZWxlc3NDb250ZXh0SWRlbnRpZmllciA9IG1fY29uZmlndXJhdGlvbi0+d2lyZWxlc3NDb250ZXh0
SWRlbnRpZmllcigpOwogI2VuZGlmCisKKyAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERh
dGFiYXNlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCJJbnRlcm5hbERlYnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJs
ZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnBsYXRmb3JtSW52YWxpZGF0ZUNvbnRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1Byb3Zpc2lvbmFsUGFnZVByb3h5LmgKaW5kZXggODg4M2Y3MzQ1Njc2OTQ0ZjQzYjM4ODAx
YzVhNTFhYzA3MGIyNDViMS4uMTZiZDVjZDU4NTEzYWZhZTliMDAyZDY5MjgyNzMyMGE2Njc3NDk4
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUHJvdmlzaW9uYWxQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Qcm92aXNpb25hbFBhZ2VQcm94eS5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVk
ZSAiU2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldlYkZyYW1lUG9saWN5TGlzdGVuZXJQ
cm94eS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2Vi
c2l0ZVBvbGljaWVzRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCA4N2UxYjdjYmU4YmMyODk1
NWI3YTYyMjhiNGY0OTFmMjMzZjViMGFjLi45YzZiOTI2N2ZiNDgxMzIxY2Y4NzA3YTc0MDI2MDkx
NzRiZmY2YzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CkBAIC04Niw2ICs4Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzV2FybWluZy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
dW50aW1lQXBwbGljYXRpb25DaGVja3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3Rm
L0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE5ZmIyZDA3YzE4MjRm
NmQ2YzE3MDkzNjM5YTdlZjY1NWFhMWEyNDMuLmQwMWE5N2E2ODQxZGM5Y2ZlYjlmYzU4OTRjNjIy
MThlYzM3NGRhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMzUzMiw2ICszNTMyLDggQEAKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5
QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUlu
dGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc2MkI3NDg0MTIw
QkJBMkQwMDgxOTMzOSAvKiBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QTBENzg2MTIyMDc5MUVDMDBFQkNGNTQgLyogUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDsgcGF0aCA9IENsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0EwRDc4NjIyMjA3OTFFRDAwRUJDRjU0IC8qIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcDsgcGF0aCA9
IENsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QTE1MDY3MjFERDU2Mjk4MDAxRjRCNTggLyogY29t
LmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9ICJj
b20uYXBwbGUuV2ViS2l0LnBsdWdpbi1jb21tb24uc2IiOyBwYXRoID0gIkRlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvY29tLmFwcGxlLldlYktpdC5wbHVnaW4tY29tbW9uLnNiIjsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJN0ExRTJBODQxRUVGRTg4QTAwMzdBMEUwIC8qIEFQ
SU5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFQSU5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdBM0FDRTFBMUVFRUY3OEMwMEE4NjRBNCAvKiBBUElJbmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVBJSW5qZWN0ZWRCdW5k
bGVQYWdlTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTUx
LDYgKzM1NTMsOSBAQAogCQk3QTlDRDhDMjFDNzc5QUQ2MDBEOUY2QzcgLyogV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdl
YlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDQxRUVBQUUyMzAwMDM3QjJCIC8qIEFQSUljb25EYXRhYmFz
ZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBUElJY29uRGF0YWJh
c2VDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FCNkVBNDYxRUVBQjZC
MDAwMDM3QjJCIC8qIEFQSUdlb2xvY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQVBJR2VvbG9jYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3QUNFODJFNzIyMUNBRTA2MDAwREE5NEMgLyogUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlc291cmNl
TG9hZFN0YXRpc3RpY3NTdG9yZS5oOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0FDRTgyRTgyMjFD
QUUwNzAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUu
Y3BwOyBwYXRoID0gQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3QUNFODJFOTIyMURFNzIyMDAwREE5NEMgLyog
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5tbTsgcGF0aCA9IENsYXNzaWZpZXIv
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdBRjIzNjFFMUU3OUEzQjQwMDQzOEEwNSAvKiBXZWJFcnJvcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViRXJyb3JzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MUYxRTc5QTNEODAwNDM4QTA1IC8qIFdlYkVycm9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFcnJvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0FGMjM2MjIxRTc5QTQzMTAwNDM4QTA1IC8qIFdlYkVy
cm9yc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
RXJyb3JzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzAxLDcgKzM3
MDYsNiBAQAogCQk4MzcyREIyNjFBNjc1NjI4MDBDNjk3QzUgLyogV2ViUGFnZURpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTgzNzJEQjI3MUE2NzU2MjgwMEM2OTdDNSAvKiBXZWJQYWdlRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUGFnZURpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzNzJE
QjJFMUE2NzdENEEwMEM2OTdDNSAvKiBXS0RpYWdub3N0aWNMb2dnaW5nUmVzdWx0VHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0RpYWdub3N0aWNMb2dnaW5nUmVzdWx0
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4MzdBNjYwMDIwRTJBRDg0MDBB
OURCRDggLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc01lbW9yeVN0b3JlQ29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODM4OTFC
NjIxQTY4QjM0MjAwMzBGMzg2IC8qIEFQSURpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFQSURpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzODkxQjY4MUE2OEJFQkMwMDMwRjM4NiAv
KiBfV0tEaWFnbm9zdGljTG9nZ2luZ0RlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IF9XS0RpYWdub3N0aWNMb2dnaW5nRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODM4OTFCNkExQTY4QzMwQjAwMzBGMzg2IC8qIERpYWdub3N0aWNMb2dn
aW5nQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpYWdub3N0aWNM
b2dnaW5nQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzI4LDcgKzUz
MzIsNiBAQAogCQkJCUNEQTI5QTFFMUNCRUI1RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25N
YW5hZ2VyUHJveHkuaCAqLywKIAkJCQlDREEyOUEyMjFDQkVCNjFBMDA5MDFDQ0YgLyogUGxheWJh
Y2tTZXNzaW9uTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluICovLAogCQkJCUNEQTI5QTFGMUNCRUI1
RkIwMDkwMUNDRiAvKiBQbGF5YmFja1Nlc3Npb25NYW5hZ2VyUHJveHkubW0gKi8sCi0JCQkJODM3
QTY2MDAyMEUyQUQ4NDAwQTlEQkQ4IC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NNZW1vcnlTdG9y
ZUNvY29hLm1tICovLAogCQkJCTVDQTk4NTRCMjEwQkVCNzMwMDU3RUI2QiAvKiBTYWZlQnJvd3Np
bmdXYXJuaW5nQ29jb2EubW0gKi8sCiAJCQkJMUEwMDJENDcxOTZCMzQ1RDAwQjlBRDQ0IC8qIFNl
c3Npb25TdGF0ZUNvZGluZy5oICovLAogCQkJCTFBMDAyRDQ2MTk2QjM0NUQwMEI5QUQ0NCAvKiBT
ZXNzaW9uU3RhdGVDb2RpbmcubW0gKi8sCkBAIC02OTMwLDEwICs2OTMzLDE1IEBACiAJCTdBODQz
QTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3QTBENzg2MjIyMDc5MUVEMDBFQkNGNTQgLyogUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwICovLAorCQkJCTdBMEQ3ODYxMjIw
NzkxRUMwMEVCQ0Y1NCAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oICov
LAogCQkJCTdBRkJEMzY0MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
TWVtb3J5U3RvcmUuY3BwICovLAogCQkJCTdBRkJEMzY1MjFFNTFCQUIwMDVEQkFDQiAvKiBSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzTWVtb3J5U3RvcmUuaCAqLywKIAkJCQk3QUZCRDM2OTIxRTU0MkU4
MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGljc1BlcnNpc3RlbnRTdG9yYWdlLmNwcCAq
LywKIAkJCQk3QUZCRDM2ODIxRTU0MkU4MDA1REJBQ0IgLyogUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1BlcnNpc3RlbnRTdG9yYWdlLmggKi8sCisJCQkJN0FDRTgyRTgyMjFDQUUwNzAwMERBOTRDIC8q
IFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgKi8sCisJCQkJN0FDRTgyRTcyMjFDQUUw
NjAwMERBOTRDIC8qIFJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oICovLAorCQkJCTdBQ0U4
MkU5MjIxREU3MjIwMDBEQTk0QyAvKiBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmVDb2NvYS5t
bSAqLywKIAkJCQk3QTQxRTlGQTIxRjgxREFDMDBCODhDREIgLyogU2hvdWxkR3JhbmRmYXRoZXJT
dGF0aXN0aWNzLmggKi8sCiAJCQkJN0EzRkVDQTEyMUY3QzA5NzAwRjI2N0NEIC8qIFN0b3JhZ2VB
Y2Nlc3NTdGF0dXMuaCAqLywKIAkJCQk3QTg0M0ExQTIxRTQxRkIyMDBERUY2NjMgLyogV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCAqLywKQEAgLTk2MTIsNiArOTYyMCw3IEBACiAJ
CQkJN0MzNjFENzkxOTI4MDNCRDAwMzZBNTlEIC8qIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE1NzM5QkJEMUI0MjA0MkQwMEQyNThD
MSAvKiBXZWJVc2VyTWVkaWFDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRUU1NzVDMURC
N0Q2MTEwMEM3NEM1MCAvKiBXZWJWYWxpZGF0aW9uTWVzc2FnZUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTcyRkQ0NDMyMjI2NUNFMjAwQTFFQ0MzIC8qIFdlYlZpZXdEaWRNb3ZlVG9XaW5k
b3dPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRGQzdEQkIxQkNDQzE5NTAwQzE1NDhD
IC8qIFdlYlZpZXdJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUNENTVBQTEyOEUyOTRGMDAx
MzNDODUgLyogV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI5MjMyREY0MThCMjlENjgwMEQwNTk2RiAvKiBXS0FjY2Vzc2liaWxpdHlXZWJQYWdl
T2JqZWN0TWFjLmggaW4gSGVhZGVycyAqLywKQEAgLTk3NDgsNyArOTc1Nyw2IEBACiAJCQkJQzU0
MjU2QkExOEJFQzE4QzAwREU0MTc5IC8qIFdLRm9ybVNlbGVjdENvbnRyb2wuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDhDRjUyMUQ2M0MxM0EwMEI0OERGMSAvKiBXS0Zvcm1TZWxlY3RQaWNrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDhDRjU0MUQ2M0MxNDAwMEI0OERGMSAvKiBXS0Zvcm1T
ZWxlY3RQb3BvdmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk1NzJGRDQ0MzIyMjY1Q0UyMDBBMUVD
QzMgLyogV2ViVmlld0RpZE1vdmVUb1dpbmRvd09ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQ0U0Njk1QTEyMTRFREY0MDAwQjk4RUIgLyogV0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzN0RGQTcwMDE4MTBCQjkyMDAxRjRBOUYgLyogV0tGb3VuZGF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QwMTM5QjExMEZBNDIwMDAzQjhBNjcgLyogV0tG
cmFtZS5oIGluIEhlYWRlcnMgKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>