<?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>205844</bug_id>
          
          <creation_ts>2020-01-06 17:38:37 -0800</creation_ts>
          <short_desc>Add correct grandfathering functionality to the ITP database backend</short_desc>
          <delta_ts>2020-01-13 12:59:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kate Cheney">katherine_cheney</reporter>
          <assigned_to name="Kate Cheney">katherine_cheney</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wilander</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1603395</commentid>
    <comment_count>0</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-06 17:38:37 -0800</bug_when>
    <thetext>The ITP database should grandfather statistics with the same functionality as the memory store</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603396</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-06 17:39:29 -0800</bug_when>
    <thetext>&lt;rdar://problem/58360450&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603643</commentid>
    <comment_count>2</comment_count>
      <attachid>386990</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-07 10:36:17 -0800</bug_when>
    <thetext>Created attachment 386990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603876</commentid>
    <comment_count>3</comment_count>
      <attachid>387053</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-07 16:46:13 -0800</bug_when>
    <thetext>Created attachment 387053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603886</commentid>
    <comment_count>4</comment_count>
      <attachid>387053</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2020-01-07 17:09:19 -0800</bug_when>
    <thetext>Comment on attachment 387053
Patch

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

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:315
&gt; +        m_shouldGrandfatherStatistics = false;

I feel like we should use the ShouldGrandfatherStatistics enum here, since it exists.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:261
&gt; +    bool m_shouldGrandfatherStatistics { false };

ShouldGrandfatherStatistics m_shouldGrandfatherStatistics { ShouldGrandfatherStatistics::No };

&gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:955
&gt; +            downcast&lt;ResourceLoadStatisticsDatabaseStore&gt;(*m_statisticsStore).setShouldGrandfatherStatistics(true);

Why isn&apos;t this case handled below, in the completion handler for &apos;m_statisticsStore-&gt;clear()&apos;, where we call &apos;grandfatherExistingWebsiteData&apos;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604103</commentid>
    <comment_count>5</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-08 08:31:56 -0800</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #4)
&gt; Comment on attachment 387053 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387053&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:315
&gt; &gt; +        m_shouldGrandfatherStatistics = false;
&gt; 
&gt; I feel like we should use the ShouldGrandfatherStatistics enum here, since
&gt; it exists.
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:261
&gt; &gt; +    bool m_shouldGrandfatherStatistics { false };
&gt; 
&gt; ShouldGrandfatherStatistics m_shouldGrandfatherStatistics {
&gt; ShouldGrandfatherStatistics::No };
&gt; 

Agreed! I will use this if we keep the boolean name, see my comment below about potentially changing it.

&gt; &gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:955
&gt; &gt; +            downcast&lt;ResourceLoadStatisticsDatabaseStore&gt;(*m_statisticsStore).setShouldGrandfatherStatistics(true);
&gt; 
&gt; Why isn&apos;t this case handled below, in the completion handler for
&gt; &apos;m_statisticsStore-&gt;clear()&apos;, where we call &apos;grandfatherExistingWebsiteData&apos;?

I put it here because it&apos;s logically different than the shouldGrandfather variable below and corresponds with the existence of the plist, not on the website data being removed. Looking at it now, I&apos;m wondering if I should call the boolean something different than m_shouldGrandfatherStatistics. Something like &quot;m_isNewResourceLoadStatisticsFile&quot; seems more accurate for the purpose it serves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604109</commentid>
    <comment_count>6</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-08 08:34:27 -0800</bug_when>
    <thetext>So many failing/crashing iOS API tests... They aren&apos;t the ones I changed or added but could be related? I&apos;ll look into them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604110</commentid>
    <comment_count>7</comment_count>
      <attachid>387053</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-08 08:44:45 -0800</bug_when>
    <thetext>Comment on attachment 387053
Patch

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

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:138
&gt; +    bool shouldGrandfatherStatistics() { return m_shouldGrandfatherStatistics; }

const

&gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:234
&gt; +            ResourceLoadStatisticsDatabaseStore&amp; databaseStore = downcast&lt;ResourceLoadStatisticsDatabaseStore&gt;(*m_statisticsStore);

auto&amp;

&gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:241
&gt; +                postTaskReply([this, protectedThis = protectedThis.copyRef(), completionHandler = WTFMove(completionHandler)]() mutable {

WTFMove(protectedThis) ?

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:176
&gt; +    NSURL *statisticsDirectoryURL = [NSURL fileURLWithPath:[@&quot;~/Library/WebKit/TestWebKitAPI/WebsiteData/ResourceLoadStatistics&quot; stringByExpandingTildeInPath] isDirectory:YES];

Seems wrong to use ~ in testing. We normally use NSTemporaryDirectory() in tests.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:303
&gt; +    NSURL *statisticsDirectoryURL = [NSURL fileURLWithPath:[@&quot;~/Library/WebKit/TestWebKitAPI/WebsiteData/ResourceLoadStatistics&quot; stringByExpandingTildeInPath] isDirectory:YES];

Ditto

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:418
&gt; +    NSURL *statisticsDirectoryURL = [NSURL fileURLWithPath:[@&quot;~/Library/WebKit/TestWebKitAPI/WebsiteData/ResourceLoadStatistics&quot; stringByExpandingTildeInPath] isDirectory:YES];

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604112</commentid>
    <comment_count>8</comment_count>
      <attachid>387053</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-01-08 08:45:38 -0800</bug_when>
    <thetext>Comment on attachment 387053
Patch

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

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:176
&gt;&gt; +    NSURL *statisticsDirectoryURL = [NSURL fileURLWithPath:[@&quot;~/Library/WebKit/TestWebKitAPI/WebsiteData/ResourceLoadStatistics&quot; stringByExpandingTildeInPath] isDirectory:YES];
&gt; 
&gt; Seems wrong to use ~ in testing. We normally use NSTemporaryDirectory() in tests.

I mean something like:
[NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:@&quot;ResourceLoadStatistics&quot;]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604161</commentid>
    <comment_count>9</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-08 11:01:47 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #7)
&gt; Comment on attachment 387053 [details]
&gt; Patch
&gt; 

Thanks for the comments!

&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387053&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:138
&gt; &gt; +    bool shouldGrandfatherStatistics() { return m_shouldGrandfatherStatistics; }
&gt; 
&gt; const
&gt; 

This one gives me a compiler error: error: &apos;const&apos; type qualifier on return type has no effect


&gt; &gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:234
&gt; &gt; +            ResourceLoadStatisticsDatabaseStore&amp; databaseStore = downcast&lt;ResourceLoadStatisticsDatabaseStore&gt;(*m_statisticsStore);
&gt; 
&gt; auto&amp;
&gt; 
&gt; &gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:241
&gt; &gt; +                postTaskReply([this, protectedThis = protectedThis.copyRef(), completionHandler = WTFMove(completionHandler)]() mutable {
&gt; 
&gt; WTFMove(protectedThis) ?
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:176
&gt; &gt; +    NSURL *statisticsDirectoryURL = [NSURL fileURLWithPath:[@&quot;~/Library/WebKit/TestWebKitAPI/WebsiteData/ResourceLoadStatistics&quot; stringByExpandingTildeInPath] isDirectory:YES];
&gt; 
&gt; Seems wrong to use ~ in testing. We normally use NSTemporaryDirectory() in
&gt; tests.
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:303
&gt; &gt; +    NSURL *statisticsDirectoryURL = [NSURL fileURLWithPath:[@&quot;~/Library/WebKit/TestWebKitAPI/WebsiteData/ResourceLoadStatistics&quot; stringByExpandingTildeInPath] isDirectory:YES];
&gt; 
&gt; Ditto
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:418
&gt; &gt; +    NSURL *statisticsDirectoryURL = [NSURL fileURLWithPath:[@&quot;~/Library/WebKit/TestWebKitAPI/WebsiteData/ResourceLoadStatistics&quot; stringByExpandingTildeInPath] isDirectory:YES];
&gt; 
&gt; ditto


This does seem strange, but this follows the same pattern as IndexDB and LocalStorage (see LocalStorageClear.mm or IndexUpgradeToV2.mm or WebsiteDataStoreCustomPaths.mm). Unlike the layout tests, it seems like the ITP store is always in the same place for TestWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604168</commentid>
    <comment_count>10</comment_count>
      <attachid>387115</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-08 11:15:24 -0800</bug_when>
    <thetext>Created attachment 387115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604213</commentid>
    <comment_count>11</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-01-08 12:03:04 -0800</bug_when>
    <thetext>I remember Brady made a change early on so that we do attempt to grandfather any website data if the user has just deleted all website data. This case means ITP has just been told to delete all of *its* data but in parallel, all other website data has also been deleted and there is no reason to try to scan all those website data types in search for something to grandfather.

We should make sure to maintain that behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604235</commentid>
    <comment_count>12</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-08 12:40:38 -0800</bug_when>
    <thetext>(In reply to John Wilander from comment #11)
&gt; I remember Brady made a change early on so that we do attempt to grandfather
&gt; any website data if the user has just deleted all website data. This case
&gt; means ITP has just been told to delete all of *its* data but in parallel,
&gt; all other website data has also been deleted and there is no reason to try
&gt; to scan all those website data types in search for something to grandfather.
&gt; 
&gt; We should make sure to maintain that behavior.

I believe this case is covered in the GrandfatherCallbackDatabase test. More specifically, in this snippet:

 225    grandfatheredFlag = false;
 226    doneFlag = false;
 227    [dataStore removeDataOfTypes:[WKWebsiteDataStore _allWebsiteDataTypesIncludingPrivate]  modifiedSince:[NSDate distantPast] completionHandler:^ {
 228        doneFlag = true;
 229    }];
 230
 231    TestWebKitAPI::Util::run(&amp;doneFlag);
 232    TestWebKitAPI::Util::spinRunLoop(10);
 233
 234    // The website data store remove should have completed, but since we removed all of the data types that are monitored by resource load statistics,
 235    // no grandfathering call should have been made. Note that the database file will not be deleted like in the persistent storage case, only cleared.
 236    EXPECT_FALSE(grandfatheredFlag);
 237
 238    doneFlag = false;
 239    [dataStore removeDataOfTypes:[NSSet setWithObjects:WKWebsiteDataTypeCookies, _WKWebsiteDataTypeResourceLoadStatistics, nil] modifiedSince:[NSDate distantPast] completionHandler:^ {
 240        doneFlag = true;
 241    }];
 242
 243    // Since we did not remove every data type covered by resource load statistics, we do expect that grandfathering took place again.
 244    // If the test hangs waiting on either of these conditions, it has failed.
 245    TestWebKitAPI::Util::run(&amp;grandfatheredFlag);


This grandfathering actually happens in the WebResourceLoadStatisticsStore regardless of the store type (memory or database), so it should be unaffected by this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605378</commentid>
    <comment_count>13</comment_count>
      <attachid>387115</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-01-10 16:23:03 -0800</bug_when>
    <thetext>Comment on attachment 387115
Patch

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

Overall, looks good to me. See inline comments before landing.

I looked up the existing code for avoiding grandfathering when all the website data ITP cares about is deleted anyway.

It&apos;s in NetworkProcess::deleteWebsiteData() and looks like this:

#if ENABLE(RESOURCE_LOAD_STATISTICS)
    if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) {
        if (auto* networkSession = this-&gt;networkSession(sessionID)) {
            if (auto* resourceLoadStatistics = networkSession-&gt;resourceLoadStatistics()) {
                auto deletedTypesRaw = websiteDataTypes.toRaw();
                auto monitoredTypesRaw = WebResourceLoadStatisticsStore::monitoredDataTypes().toRaw();
                
                // If we are deleting all of the data types that the resource load statistics store monitors
                // we do not need to re-grandfather old data.
                auto shouldGrandfather = ((monitoredTypesRaw &amp; deletedTypesRaw) == monitoredTypesRaw) ? ShouldGrandfatherStatistics::No : ShouldGrandfatherStatistics::Yes;
                
                resourceLoadStatistics-&gt;scheduleClearInMemoryAndPersistent(modifiedSince, shouldGrandfather, [clearTasksHandler = clearTasksHandler.copyRef()] { });
            }
        }
    }
#endif

Putting it here for documentation.

&gt; Source/WebKit/ChangeLog:3
&gt; +        The ITP database backend does not grandfather statistics correctly

I would rephrase this to say what the patch does rather than what the bug is.

&gt; Source/WebKit/NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:138
&gt; +    bool isNewResourceLoadStatisticsDatabaseFile() { return m_isNewResourceLoadStatisticsDatabaseFile; }

This function can be const.

&gt; Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:239
&gt; +                databaseStore.setIsNewResourceLoadStatisticsDatabaseFile(false);

Good. Important that we reset the state.

&gt; Tools/ChangeLog:3
&gt; +        The ITP database backend does not grandfather statistics correctly

Same thing for the title.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:115
&gt; +        // the memory store and testing grandfathering.

This comment was confusion to me. We&apos;re in a clause where the database is enabled and the comments deals with the memory store note being enabled.

Can this be clarified somehow? I think there are similarly confusing comments further down.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/ResourceLoadStatistics.mm:201
&gt; +        // the database store and testing grandfathering.

This comment is confusing since clearly we&apos;re in a clause where the database store is not enabled. Could this be rephrased as &quot;Since the database store …&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605446</commentid>
    <comment_count>14</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-10 17:57:14 -0800</bug_when>
    <thetext>(In reply to John Wilander from comment #13)
&gt; Comment on attachment 387115 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=387115&amp;action=review
&gt; 
&gt; Overall, looks good to me. See inline comments before landing.
&gt; 

Thanks for looking it over!

&gt; I looked up the existing code for avoiding grandfathering when all the
&gt; website data ITP cares about is deleted anyway.
&gt; 
&gt; It&apos;s in NetworkProcess::deleteWebsiteData() and looks like this:
&gt; 
&gt; #if ENABLE(RESOURCE_LOAD_STATISTICS)
&gt;     if (websiteDataTypes.contains(WebsiteDataType::ResourceLoadStatistics)) {
&gt;         if (auto* networkSession = this-&gt;networkSession(sessionID)) {
&gt;             if (auto* resourceLoadStatistics =
&gt; networkSession-&gt;resourceLoadStatistics()) {
&gt;                 auto deletedTypesRaw = websiteDataTypes.toRaw();
&gt;                 auto monitoredTypesRaw =
&gt; WebResourceLoadStatisticsStore::monitoredDataTypes().toRaw();
&gt;                 
&gt;                 // If we are deleting all of the data types that the
&gt; resource load statistics store monitors
&gt;                 // we do not need to re-grandfather old data.
&gt;                 auto shouldGrandfather = ((monitoredTypesRaw &amp;
&gt; deletedTypesRaw) == monitoredTypesRaw) ? ShouldGrandfatherStatistics::No :
&gt; ShouldGrandfatherStatistics::Yes;
&gt;                 
&gt;                
&gt; resourceLoadStatistics-&gt;scheduleClearInMemoryAndPersistent(modifiedSince,
&gt; shouldGrandfather, [clearTasksHandler = clearTasksHandler.copyRef()] { });
&gt;             }
&gt;         }
&gt;     }
&gt; #endif
&gt; 
&gt; Putting it here for documentation.
&gt; 

Good idea.


Going to upload with these changes and let the bots run before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605447</commentid>
    <comment_count>15</comment_count>
      <attachid>387409</attachid>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-10 17:59:08 -0800</bug_when>
    <thetext>Created attachment 387409
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605513</commentid>
    <comment_count>16</comment_count>
      <attachid>387409</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-11 06:58:05 -0800</bug_when>
    <thetext>Comment on attachment 387409
Patch

Clearing flags on attachment: 387409

Committed r254397: &lt;https://trac.webkit.org/changeset/254397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605514</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-01-11 06:58:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606007</commentid>
    <comment_count>18</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-01-13 12:59:19 -0800</bug_when>
    <thetext>*** Bug 205753 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386990</attachid>
            <date>2020-01-07 10:36:17 -0800</date>
            <delta_ts>2020-01-07 16:46:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205844-20200107103616.patch</filename>
            <type>text/plain</type>
            <size>26766</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk5YzM3MjcwMWZjMzMzMDQz
NDQxOWE2ZGE1YjM2NmIxODdhN2Y3ZTcuLjMwMTIwMzEyOGI5OTFiY2Q1MTNmYzc1Mzg3NTcyMjQ0
ZmMzYzJmZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMjAtMDEtMDcgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIElUUCBkYXRh
YmFzZSBiYWNrZW5kIGRvZXMgbm90IGdyYW5kZmF0aGVyIHN0YXRpc3RpY3MgY29ycmVjdGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU4NDQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4MzYwNDUwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsaXR5IGZv
ciBncmFuZGZhdGhlcmluZyBzdGF0aXN0aWNzIHVwb24KKyAgICAgICAgY3JlYXRpb24gb2YgYSBu
ZXcgSVRQIGRhdGFiYXNlIGZpbGUuIFRoZSBtZW1vcnkgc3RvcmUgcmVsaWVzIG9uCisgICAgICAg
IHRoZSBwcmVzZW5jZSBvZiB0aGUgSVRQIHBsaXN0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRh
dGEgc2hvdWxkCisgICAgICAgIGJlIGdyYW5kZmF0aGVyZWQuIFNpbmNlIHRoZSBkYXRhYmFzZSBk
b2VzIG5vdCB1c2UgYSBwbGlzdCwgdGhpcyBwYXRjaAorICAgICAgICBhZGRzIGEgYm9vbGVhbiB2
YXJpYWJsZSB0byB0cmFjayB3aGV0aGVyIHRoZSBkYXRhYmFzZSBmaWxlIHByZXZpb3VzbHkKKyAg
ICAgICAgZXhpc3RlZCBvciBub3QgdG8gaW5kaWNhdGUgd2hlbiB0byBncmFuZGZhdGhlci4KKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6Cisg
ICAgICAgIFRoZSBib29sZWFuIHZhcmlhYmxlIG1fc2hvdWxkR3JhbmRmYXRoZXIgaXMgc2V0IHRv
IHRydWUgaWYgdGhlCisgICAgICAgIGRhdGFiYXNlIGZpbGUgZG9lcyBub3QgcHJldmlvdXNseSBl
eGlzdCwgaW5kaWNhdGluZyBJVFAgaXMgYmVpbmcgdXNlZAorICAgICAgICBmb3IgdGhlIGZpcnN0
IHRpbWUgYW5kIGRhdGEgc2hvdWxkIGJlIGdyYW5kZmF0aGVyZWQuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cG9wdWxh
dGVNZW1vcnlTdG9yZUZyb21EaXNrKToKKyAgICAgICAgVGhpcyBpcyB3aGVyZSB0aGUgZ3JhbmRm
YXRoZXJpbmcgaGFwcGVucy4gVGhlIGNhbGwgdG8gbG9nVGVzdGluZ0V2ZW50CisgICAgICAgIGlz
IGZvciBBUEkgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgorCisgICAgICAgIChXZWJLaXQ6OldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lz
dGVudCk6CisgICAgICAgIElmIGEgc2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBp
cyBjYWxsZWQsIHRoZSBwbGlzdCBpcworICAgICAgICBkZWxldGVkLCBhbmQgZGF0YSB3aWxsIGJl
IGdyYW5kZmF0aGVyZWQgdXBvbiByZWNyZWF0aW9uLiBUbyBtaW1pYworICAgICAgICB0aGlzLCB0
aGUgSVRQIGRhdGFiYXNlIHN0b3JlIGJvb2xlYW4gaXMgc2V0IHRvIHRydWUuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW06CisgICAgICAgICgtW1dLUHJl
ZmVyZW5jZXMgX2lzSVRQRGF0YWJhc2VFbmFibGVkXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlz
IG5lZWRlZCBmb3IgdGhlIEFQSSB0ZXN0IHRvIGtub3cgaWYgdGhlIElUUCBzdG9yZSBpcworICAg
ICAgICBhbHJlYWR5IGFjdGl2YXRlZC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJvcGVybHkgcnVu
IHRoZSBncmFuZGZhdGhlcmluZworICAgICAgICBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbToKKyAgICAgICAgVGhlIEFQSSB0ZXN0
cyByZWx5IG9uIHRoZSBJVFAgZGF0YWJhc2UgZmxhZyBiZWluZyBzZXQgY29ycmVjdGx5LiBTaW5j
ZQorICAgICAgICBiZWluZyBvbi1ieS1kZWZhdWx0LCB0aGUgSVRQIGRhdGFiYXNlIGZsYWcgZG9l
cyBub3Qgc2hvdyB1cCBpbiB0aGUKKyAgICAgICAgdXNlciBkZWZhdWx0cyBtZW51IGlmIGVuYWJs
ZWQuIFRoaXMgcGF0Y2ggZmlyc3QgY2hlY2tzIHRvIHNlZSBpZiBpdHMKKyAgICAgICAgaW4gdGhl
IGRlZmF1bHRzIG1lbnUsIGFuZCByZXR1cm5zIHRoZSBkZWZhdWx0IHByZWZlcmVuY2VzIHZhbHVl
IGlmCisgICAgICAgIG5vdC4gVGhpcyBlbnN1cmVzIHRoZSBwcmVmZXJlbmNlcyB2YWx1ZSBtYXRj
aGVzIHRoZSBhY3R1YWwgc3RvcmUgYmVpbmcKKyAgICAgICAgaW5pdGlhbGl6ZWQuCisKIDIwMjAt
MDEtMDYgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtp
T1NdIElzc3VlIG1hY2ggbG9va3VwIGV4dGVuc2lvbiB0byBsYXVuY2ggc2VydmljZXMgZGFlbW9u
IGZvciBNYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlLmNwcAppbmRleCA2NTQxYTRjYTE0OTYwYWRiZjMwZGJkMmQ5ODI0NDgxY2JkZjEw
NmJmLi4xNzY0Y2I2ZmI2NTMxMWY0ZDQwYmU5NTcwYTZhYTI4Y2RkMzFlM2YwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAg
LTMwOSw2ICszMDksMTEgQEAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OlJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlKFdlYlJlc28KIAogdm9pZCBSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKIHsKKyAgICBp
ZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpCisgICAg
ICAgIG1fc2hvdWxkR3JhbmRmYXRoZXIgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9zaG91
bGRHcmFuZGZhdGhlciA9IGZhbHNlOworCiAgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4obV9zdG9y
YWdlRGlyZWN0b3J5UGF0aCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywg
IiVwIC0gUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW4gZmFpbGVkLCBl
cnJvciBtZXNzYWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBwYXRoOiAle3B1YmxpY31zIiwgdGhp
cywgbV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCmluZGV4IDliMzEwZWMz
YzZmMDVkMzI0Y2NlNDM1MzE1MjcwNmRiNGNhNmYxMmYuLmQ3ZmM4ZTM5NTQ4ZDRiNDRiZWViY2E4
NjQwYzg5MjQxOWI1ZDZiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZS5oCkBAIC0xMzUsNiArMTM1LDggQEAgcHVibGljOgogICAgIGJv
b2wgaXNDb3JyZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwg
Y29uc3QgVG9wRnJhbWVEb21haW4mKTsKICAgICB2b2lkIHJlc291cmNlVG9TdHJpbmcoU3RyaW5n
QnVpbGRlciYsIGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIFNlY29uZHMgZ2V0TW9zdFJlY2Vu
dGx5VXBkYXRlZFRpbWVzdGFtcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGNvbnN0IFRvcEZy
YW1lRG9tYWluJikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3Mo
KSB7IHJldHVybiBtX3Nob3VsZEdyYW5kZmF0aGVyOyB9CisgICAgdm9pZCBzZXRTaG91bGRHcmFu
ZGZhdGhlclN0YXRpc3RpY3MoYm9vbCBzaG91bGRHcmFuZGZhdGhlcikgeyBtX3Nob3VsZEdyYW5k
ZmF0aGVyID0gc2hvdWxkR3JhbmRmYXRoZXI7IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIG9wZW5J
VFBEYXRhYmFzZSgpOwpAQCAtMjU2LDYgKzI1OCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBX
ZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9zdG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50Owog
ICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1fZ2V0TW9zdFJlY2VudGx5VXBk
YXRlZFRpbWVzdGFtcFN0YXRlbWVudDsKICAgICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsK
KyAgICBib29sIG1fc2hvdWxkR3JhbmRmYXRoZXIgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0Ns
YXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmUuY3BwCmluZGV4IDgyMzlkNmQ5ZjVmOTQyNTBhODExNWUwZTM1MTk4MjlmOWRkZmQxODAuLmZl
ZDg5MjBlZmQ3ZjFlMThkZDgyN2JlZmFkYTJlMDVkZmM5M2M5MzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCkBAIC0yMzAsNyArMjMwLDE5IEBA
IHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0ZU1lbW9yeVN0b3Jl
RnJvbURpc2soQ29tcGxldGlvbkhhbmRsCiAgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdl
LT5wb3B1bGF0ZU1lbW9yeVN0b3JlRnJvbURpc2soW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICAgICAgfSk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgZWxzZSBpZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0
YXRpc3RpY3NTdG9yZSkpIHsKKyAgICAgICAgICAgIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZVN0b3JlJiBkYXRhYmFzZVN0b3JlID0gZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7CisgICAgICAgICAgICBpZiAoZGF0
YWJhc2VTdG9yZS5zaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MoKSkgeworICAgICAgICAgICAg
ICAgIG1fc3RhdGlzdGljc1N0b3JlLT5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW3By
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBkYXRhYmFzZVN0b3JlLnNldFNob3VsZEdyYW5k
ZmF0aGVyU3RhdGlzdGljcyhmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBwb3N0VGFza1JlcGx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5j
b3B5UmVmKCksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIGxvZ1Rlc3RpbmdFdmVudCgiUG9wdWxh
dGVkV2l0aG91dEdyYW5kZmF0aGVyaW5nIl9zKTsKKyAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICB9
KTsKIH0KQEAgLTkzOSw2ICs5NTEsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZTo6c2NoZWR1bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcgogICAgIHBv
c3RUYXNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNob3VsZEdyYW5k
ZmF0aGVyLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgewogICAgICAgICBpZiAobV9wZXJzaXN0ZW50U3RvcmFnZSkKICAgICAgICAgICAg
IG1fcGVyc2lzdGVudFN0b3JhZ2UtPmNsZWFyKCk7CisgICAgICAgIGVsc2UgaWYgKGlzPFJlc291
cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpKQorICAg
ICAgICAgICAgZG93bmNhc3Q8UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCpt
X3N0YXRpc3RpY3NTdG9yZSkuc2V0U2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzKHRydWUpOwog
CiAgICAgICAgIGlmICghbV9zdGF0aXN0aWNzU3RvcmUpIHsKICAgICAgICAgICAgIGlmIChzaG91
bGRHcmFuZGZhdGhlciA9PSBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KaW5k
ZXggYWI3M2M1OWY3MWZmYTM5YTIyMGNlMGI1YzhkMTRmZmQ4NzRkNTdmNi4uMGI2YzY4MWE0MjBh
YTZkNjM1NTUxZTk1NDNlMWU3MjAwNTU1NGVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KQEAgLTEzMzYsNiArMTMzNiwxMSBA
QCAtIChCT09MKV9hcHBOYXBFbmFibGVkCiAgICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+cGFnZVZp
c2liaWxpdHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKTsKIH0KIAorLSAoQk9PTClf
aXNJVFBEYXRhYmFzZUVuYWJsZWQKK3sKKyAgICByZXR1cm4gX3ByZWZlcmVuY2VzLT5pc0lUUERh
dGFiYXNlRW5hYmxlZCgpOworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCiAtIChCT09M
KV9qYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGI4NDll
Y2RmOTc1ZmYxZGE1MWYzZjhjNTYwODgzNDAwYWExZWYwZGMuLmUzNGU2NTk2ZGQzMmY1NTJjNmIw
ZmQ0Yzg4MWMwNjYzZmQ3NGZiN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC0yMDYsNiArMjA2LDgg
QEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLRWRpdGFibGVMaW5rQmVoYXZpb3IpIHsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFdhbnRzQmFsYW5jZWRTZXREZWZlcnNM
b2FkaW5nQmVoYXZpb3I6KSBCT09MIF93YW50c0JhbGFuY2VkU2V0RGVmZXJzTG9hZGluZ0JlaGF2
aW9yIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWlj
LCBzZXR0ZXI9X3NldEFnZ3Jlc3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZDopIEJPT0wgX2FnZ3Jl
c3NpdmVUaWxlUmV0ZW50aW9uRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSk7
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRBcHBOYXBFbmFibGVkOikgQk9PTCBf
YXBwTmFwRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSk7CitAcHJvcGVydHkg
KG5vbmF0b21pYywgcmVhZG9ubHkpIEJPT0wgX2lzSVRQRGF0YWJhc2VFbmFibGVkIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoV0tfTUFDX1RCQSkpOworCiAjZW5kaWYKIAogQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5k
ZXggYzcwY2RhY2JhY2VjYWZhOGNjZDcwNTM2YzE1YjRlZjdhZjU5MWQxZi4uNzg5ZjMxOTc1MDU5
NGQzMWE1OTczYTljYjM4ODc5ODY3ZjVhOTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC00MDEsNyArNDAxLDEx
IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNz
QVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7CiAgICAgcGFyYW1ldGVycy5z
dXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UgPSBtX2NvbmZpZ3Vy
YXRpb24tPnN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZSgpOwog
Ci0gICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IFtkZWZhdWx0cyBib29s
Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2Vi
UHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKV1dOworICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZhdWx0
cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERlYnVn
JUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVhdGVD
RlN0cmluZygpLmdldCgpXV07CisgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQorICAgICAg
ICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVkVmFs
dWUuYm9vbFZhbHVlOworICAgIGVsc2UKKyAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJ
VFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERhdGFi
YXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1dGlv
bkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmZmOWJkYjg2
Yjc3YzY0OWMyZmU4NjQyYjM4NmJkYTEzYzY5YTRhZS4uZTJhYzlkMmFhODViYTVjYWE0ZTM3Mzgz
ZmNhYWIwYWIxODRjZGE4MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTAxLTA3ICBLYXRlIENoZW5leSAgPGth
dGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBJVFAgZGF0YWJhc2UgYmFj
a2VuZCBkb2VzIG5vdCBncmFuZGZhdGhlciBzdGF0aXN0aWNzIGNvcnJlY3RseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1ODQ0CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS81ODM2MDQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbiBvcmRlciB0byB0ZXN0IGJvdGggdGhlIElUUCBkYXRhYmFzZSBh
bmQgbWVtb3J5IHN0b3JlcywgdGhpcyBwYXRjaAorICAgICAgICBoYWQgdG8gcmVzdHJ1Y3R1cmUg
dGhlIGdyYW5kZmF0aGVyaW5nIEFQSSB0ZXN0cy4KKworICAgICAgICBJZiB0aGUgdGVzdCBpcyBm
b3IgdGhlIGRhdGFiYXNlIGJhY2tlbmQgKGVuZHMgaW4gKkRhdGFiYXNlKSwgaXQgd2lsbAorICAg
ICAgICBjaGVjayBpZiB0aGUgZGVmYXVsdCBzdG9yZSBtYXRjaGVzLiBJZiBzbywgaXQgY29udGlu
dWVzIG9uIHdpdGggdGhlCisgICAgICAgIG5vcm1hbCB0ZXN0LiBJZiBub3QsIGl0IGhhcyB0byB1
c2UgYW4gQVBJIGNhbGwgdG8gcmVjb25zdHJ1Y3QgdGhlCisgICAgICAgIG5ldyBzdG9yZSBhbmQg
ZW5zdXJlIHRoZSBncmFuZGZhdGhlcmluZyBzdGlsbCBoYXBwZW5zLiBWaWNlIHZlcnNhIGZvcgor
ICAgICAgICB0aGUgbWVtb3J5IHN0b3JlIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAgICAo
aXNJVFBEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoVEVTVCk6CisKIDIwMjAtMDEtMDYgIFBl
ciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIElzc3Vl
IG1hY2ggbG9va3VwIGV4dGVuc2lvbiB0byBsYXVuY2ggc2VydmljZXMgZGFlbW9uIGZvciBNYWls
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENv
Y29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMmQyNzlmYjUxYTFhNTQyNzQzMTY1
Mzg5N2I3ZmRlOTg4MmFkZDA5Yi4uMjAzMTEwMGUzZjgwYTFhMDY3NTFiY2FmYjRlMmE0ODJlNGNk
MzAyMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9S
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNjksNiArNjksMTkgQEAg
LSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmlzaE5hdmlnYXRpb246
KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXQKIAogQGVuZAogCitib29sIGlzSVRQRGF0YWJhc2VFbmFi
bGVkKCkKK3sKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMo
W1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBkZWZhdWx0
RGF0YWJhc2VFbmFibGVkID0gW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLl9pc0lUUERhdGFi
YXNlRW5hYmxlZDsKKworICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZh
dWx0cyBvYmplY3RGb3JLZXk6QCJJbnRlcm5hbERlYnVnSXNJVFBEYXRhYmFzZUVuYWJsZWQiXTsK
KyAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCisgICAgICAgIHJldHVybiBkYXRhYmFzZUVu
YWJsZWRWYWx1ZS5ib29sVmFsdWU7CisKKyAgICByZXR1cm4gZGVmYXVsdERhdGFiYXNlRW5hYmxl
ZDsKK30KKwogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxiYWNr
KQogewogICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVsdERh
dGFTdG9yZV07CkBAIC05Miw2ICsxMDUsMjUgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBHcmFuZGZhdGhlckNhbGxiYWNrKQogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0
YXRpc3RpY3NFbmFibGVkOllFU107CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVx
dWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl1d
XTsKIAorICAgIGlmIChpc0lUUERhdGFiYXNlRW5hYmxlZCgpKSB7CisgICAgICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRmYXRoZXJlZEZsYWcpOworCisgICAgICAgIC8vIElmIHRo
ZSBtZW1vcnkgc3RvcmUgaXMgbm90IGVuYWJsZWQsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdG9y
ZSB0byB1c2UgYSBwbGlzdCBmb3IgdGhpcyB0ZXN0LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhh
dmUgYSBOZXR3b3JrUHJvY2VzcyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBu
b3cgbWFrZSBhbm90aGVyIGNhbGwgaW5pdGlhbGl6aW5nCisgICAgICAgIC8vIHRoZSBtZW1vcnkg
c3RvcmUgYW5kIHRlc3RpbmcgZ3JhbmRmYXRoZXJpbmcuCisgICAgICAgIGdyYW5kZmF0aGVyZWRG
bGFnID0gZmFsc2U7CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3Nh
Z2UpIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpA
IkdyYW5kZmF0aGVyZWQiXSk7CisgICAgICAgICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IHRydWU7
CisgICAgICAgIH1dOworCisgICAgICAgIFtkYXRhU3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOmZh
bHNlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0g
dHJ1ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lRmxhZyk7CisgICAgfQorCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZncmFuZGZh
dGhlcmVkRmxhZyk7CiAKICAgICAvLyBTcGluIHRoZSBydW5sb29wIHVudGlsIHRoZSByZXNvdXJj
ZSBsb2FkIHN0YXRpc3RpY3MgZmlsZSBoYXMgd3JpdHRlbiB0byBkaXNrLgpAQCAtMTAzLDYgKzEz
NSw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFjaykK
ICAgICB9CiAKICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IGZhbHNlOworICAgIGRvbmVGbGFnID0g
ZmFsc2U7CiAgICAgW2RhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0
b3JlIF9hbGxXZWJzaXRlRGF0YVR5cGVzSW5jbHVkaW5nUHJpdmF0ZV0gIG1vZGlmaWVkU2luY2U6
W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CiAgICAgICAgIGRvbmVG
bGFnID0gdHJ1ZTsKICAgICB9XTsKQEAgLTEzNCw2ICsxNjcsODEgQEAgVEVTVChSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxiYWNrKQogICAgIH0KIH0KIAorVEVTVChSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxiYWNrRGF0YWJhc2UpCit7CisgICAg
YXV0byAqZGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXTsK
KworICAgIE5TVVJMICpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMID0gW05TVVJMIGZpbGVVUkxXaXRo
UGF0aDpbQCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RXZWJLaXRBUEkvV2Vic2l0ZURhdGEvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyIgc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rv
cnk6WUVTXTsKKyAgICBOU1VSTCAqZmlsZVVSTCA9IFtzdGF0aXN0aWNzRGlyZWN0b3J5VVJMIFVS
TEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOworICAgIFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOmZpbGVVUkwgZXJyb3I6
bmlsXTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVS
TDpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMIGVycm9yOm5pbF07CisgICAgRVhQRUNUX0ZBTFNFKFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzdGF0aXN0aWNz
RGlyZWN0b3J5VVJMLnBhdGhdKTsKKworICAgIHN0YXRpYyBib29sIGdyYW5kZmF0aGVyZWRGbGFn
OworICAgIHN0YXRpYyBib29sIGRvbmVGbGFnOworCisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBO
U1N0cmluZyAqbWVzc2FnZSkgeworICAgICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFs
VG9TdHJpbmc6QCJHcmFuZGZhdGhlcmVkIl0pOworICAgICAgICBncmFuZGZhdGhlcmVkRmxhZyA9
IHRydWU7CisgICAgfV07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3
IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAg
W2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKKyAgICBb
d2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBV
UkxXaXRoU3RyaW5nOkAiYWJvdXQ6YmxhbmsiXV1dOworCisgICAgaWYgKCFpc0lUUERhdGFiYXNl
RW5hYmxlZCgpKSB7CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRmYXRo
ZXJlZEZsYWcpOworCisgICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBub3QgZW5h
YmxlZCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVzZSBhIGRhdGFiYXNlIGluc3Rl
YWQgb2YgYSBwbGlzdCBmb3IgdGhpcyB0ZXN0LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUg
YSBOZXR3b3JrUHJvY2VzcyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBub3cg
bWFrZSBhbm90aGVyIGNhbGwgaW5pdGlhbGl6aW5nCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZSBz
dG9yZSBhbmQgdGVzdGluZyBncmFuZGZhdGhlcmluZy4KKyAgICAgICAgZ3JhbmRmYXRoZXJlZEZs
YWcgPSBmYWxzZTsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2Fn
ZSkgeworICAgICAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAi
R3JhbmRmYXRoZXJlZCJdKTsKKyAgICAgICAgICAgIGdyYW5kZmF0aGVyZWRGbGFnID0gdHJ1ZTsK
KyAgICAgICAgfV07CisKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0VXNlSVRQRGF0YWJhc2U6dHJ1
ZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBkb25lRmxhZyA9IHRy
dWU7CisgICAgICAgIH1dOworCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUZsYWcpOworICAgIH0KKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRmYXRo
ZXJlZEZsYWcpOworCisgICAgLy8gU3BpbiB0aGUgcnVubG9vcCB1bnRpbCB0aGUgcmVzb3VyY2Ug
bG9hZCBzdGF0aXN0aWNzIGZpbGUgaGFzIHdyaXR0ZW4gdG8gZGlzay4KKyAgICAvLyBJZiB0aGUg
dGVzdCBlbnRlcnMgYSBzcGluIGxvb3AgaGVyZSwgaXQgaGFzIGZhaWxlZC4KKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBpZiAoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxl
RXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CisgICAgfQorCisgICAgZ3JhbmRm
YXRoZXJlZEZsYWcgPSBmYWxzZTsKKyAgICBkb25lRmxhZyA9IGZhbHNlOworICAgIFtkYXRhU3Rv
cmUgcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsV2Vic2l0ZURhdGFU
eXBlc0luY2x1ZGluZ1ByaXZhdGVdICBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3Rd
IGNvbXBsZXRpb25IYW5kbGVyOl4geworICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAgfV07
CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CisKKyAgICAvLyBUaGUgd2Vic2l0ZSBkYXRh
IHN0b3JlIHJlbW92ZSBzaG91bGQgaGF2ZSBjb21wbGV0ZWQsIGJ1dCBzaW5jZSB3ZSByZW1vdmVk
IGFsbCBvZiB0aGUgZGF0YSB0eXBlcyB0aGF0IGFyZSBtb25pdG9yZWQgYnkgcmVzb3VyY2UgbG9h
ZCBzdGF0aXN0aWNzLAorICAgIC8vIG5vIGdyYW5kZmF0aGVyaW5nIGNhbGwgc2hvdWxkIGhhdmUg
YmVlbiBtYWRlLiBOb3RlIHRoYXQgdGhlIGRhdGFiYXNlIGZpbGUgd2lsbCBub3QgYmUgZGVsZXRl
ZCBsaWtlIGluIHRoZSBwZXJzaXN0ZW50IHN0b3JhZ2UgY2FzZSwgb25seSBjbGVhcmVkLgorICAg
IEVYUEVDVF9GQUxTRShncmFuZGZhdGhlcmVkRmxhZyk7CisKKyAgICBkb25lRmxhZyA9IGZhbHNl
OworICAgIFtkYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3Rz
OldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgX1dLV2Vic2l0ZURhdGFUeXBlUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBs
ZXRpb25IYW5kbGVyOl4geworICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAgfV07CisKKyAg
ICAvLyBTaW5jZSB3ZSBkaWQgbm90IHJlbW92ZSBldmVyeSBkYXRhIHR5cGUgY292ZXJlZCBieSBy
ZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MsIHdlIGRvIGV4cGVjdCB0aGF0IGdyYW5kZmF0aGVyaW5n
IHRvb2sgcGxhY2UgYWdhaW4uCisgICAgLy8gSWYgdGhlIHRlc3QgaGFuZ3Mgd2FpdGluZyBvbiBl
aXRoZXIgb2YgdGhlc2UgY29uZGl0aW9ucywgaXQgaGFzIGZhaWxlZC4KKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmVGbGFnKTsKK30KKwogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBT
aG91bGROb3RHcmFuZGZhdGhlck9uU3RhcnR1cCkKIHsKICAgICBhdXRvICpkYXRhU3RvcmUgPSBb
V0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOwpAQCAtMTQ4LDYgKzI1Niw4IEBA
IFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU2hvdWxkTm90R3JhbmRmYXRoZXJPblN0YXJ0
dXApCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxl
RXhpc3RzQXRQYXRoOnRhcmdldFVSTC5wYXRoXSk7CiAKICAgICBzdGF0aWMgYm9vbCBjYWxsYmFj
a0ZsYWc7CisgICAgc3RhdGljIGJvb2wgZG9uZUZsYWc7CisKICAgICBbZGF0YVN0b3JlIF9zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0b3Jl
ICosIE5TU3RyaW5nICptZXNzYWdlKSB7CiAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlz
RXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKICAgICAg
ICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsKQEAgLTE1OCw2ICsyNjgsNzMgQEAgVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBTaG91bGROb3RHcmFuZGZhdGhlck9uU3RhcnR1cCkKICAgICBbZGF0
YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJhYm91dDpibGFuayJdXV07CiAKKyAgICBpZiAoaXNJVFBEYXRhYmFzZUVuYWJs
ZWQoKSkgeworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNrRmxhZyk7
CisKKyAgICAgICAgLy8gSWYgdGhlIG1lbW9yeSBzdG9yZSBpcyBub3QgZW5hYmxlZCwgd2UgbmVl
ZCB0byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVzZSBhIHBsaXN0IGZvciB0aGlzIHRlc3QuCisgICAg
ICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNzIHVwIGFuZCBydW5uaW5nIHdp
dGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2FsbCBpbml0aWFsaXppbmcKKyAg
ICAgICAgLy8gdGhlIG1lbW9yeSBzdG9yZSBhbmQgdGVzdGluZyBncmFuZGZhdGhlcmluZy4KKyAg
ICAgICAgY2FsbGJhY2tGbGFnID0gZmFsc2U7CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwg
TlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlz
RXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKKyAgICAg
ICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7CisgICAgICAgIH1dOworCisgICAgICAgIFtkYXRh
U3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOmZhbHNlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQp
IHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQorCisgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOworfQorCitURVNUKFJlc291cmNlTG9h
ZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdyYW5kZmF0aGVyT25TdGFydHVwRGF0YWJhc2UpCit7Cisg
ICAgYXV0byAqZGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3Jl
XTsKKworICAgIE5TVVJMICpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMID0gW05TVVJMIGZpbGVVUkxX
aXRoUGF0aDpbQCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RXZWJLaXRBUEkvV2Vic2l0ZURhdGEvUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyIgc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJl
Y3Rvcnk6WUVTXTsKKyAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW3N0YXRpc3RpY3NEaXJlY3RvcnlV
UkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CisgICAg
TlNVUkwgKnRlc3RSZXNvdXJjZVVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJFbXB0eUdyYW5kZmF0aGVyZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIiB3aXRoRXh0
ZW5zaW9uOkAicGxpc3QiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07
CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0
VVJMOnN0YXRpc3RpY3NEaXJlY3RvcnlVUkwgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllF
UyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0
TWFuYWdlcl0gY29weUl0ZW1BdFVSTDp0ZXN0UmVzb3VyY2VVUkwgdG9VUkw6dGFyZ2V0VVJMIGVy
cm9yOm5pbF07CisKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFn
ZXJdIGZpbGVFeGlzdHNBdFBhdGg6dGFyZ2V0VVJMLnBhdGhdKTsKKworICAgIHN0YXRpYyBib29s
IGNhbGxiYWNrRmxhZzsKKyAgICBzdGF0aWMgYm9vbCBkb25lRmxhZzsKKworICAgIFtkYXRhU3Rv
cmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVE
YXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgQVNTRVJUX1RSVUUoW21l
c3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9wdWxhdGVkV2l0aG91dEdyYW5kZmF0aGVyaW5nIl0p
OworICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOworICAgIH1dOworCisgICAgLy8gV2UgbmVl
ZCBhbiBhY3RpdmUgTmV0d29ya1Byb2Nlc3MgdG8gcGVyZm9ybSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzIG9wZXJhdGlvbnMuCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1dLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDgwMCwgNjAwKV0pOworICAgIFtk
YXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CisgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl1dXTsKKworICAgIGlmICghaXNJVFBEYXRhYmFzZUVu
YWJsZWQoKSkgeworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNrRmxh
Zyk7CisKKyAgICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHN0b3JlIGlzIG5vdCBlbmFibGVkLCB3
ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RvcmUgdG8gdXNlIGEgZGF0YWJhc2UgaW5zdGVhZCBvZiBh
IHBsaXN0IGZvciB0aGlzIHRlc3QuCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdv
cmtQcm9jZXNzIHVwIGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFu
b3RoZXIgY2FsbCBpbml0aWFsaXppbmcKKyAgICAgICAgLy8gdGhlIGRhdGFiYXNlIHN0b3JlIGFu
ZCB0ZXN0aW5nIGdyYW5kZmF0aGVyaW5nLgorICAgICAgICBjYWxsYmFja0ZsYWcgPSBmYWxzZTsK
KyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxs
YmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgeworICAgICAg
ICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9wdWxhdGVkV2l0
aG91dEdyYW5kZmF0aGVyaW5nIl0pOworICAgICAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsK
KyAgICAgICAgfV07CisKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0VXNlSVRQRGF0YWJhc2U6dHJ1
ZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBkb25lRmxhZyA9IHRy
dWU7CisgICAgICAgIH1dOworCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9u
ZUZsYWcpOworICAgIH0KKwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2FsbGJhY2tG
bGFnKTsKIH0KIApAQCAtMTc5LDEwICszNTYsMTEgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzLCBDaGlsZFByb2Nlc3Nlc05vdExhdW5jaGVkKQogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnRhcmdldFVSTC5wYXRo
XSk7CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsYmFja0ZsYWc7CiAgICAgc3RhdGljIGJvb2wgZG9u
ZUZsYWc7CiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdD
YWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgewogICAg
ICAgICBFWFBFQ1RfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRo
b3V0R3JhbmRmYXRoZXJpbmciXSk7Ci0gICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAg
Y2FsbGJhY2tGbGFnID0gdHJ1ZTsKICAgICB9XTsKIAogICAgIC8vIFdlIG5lZWQgYW4gYWN0aXZl
IE5ldHdvcmtQcm9jZXNzIHRvIHBlcmZvcm0gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBvcGVyYXRp
b25zLgpAQCAtMTkwLDcgKzM2OCw4NiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENo
aWxkUHJvY2Vzc2VzTm90TGF1bmNoZWQpCiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxS
ZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYWJvdXQ6Ymxhbmsi
XV1dOwogCi0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgaWYg
KGlzSVRQRGF0YWJhc2VFbmFibGVkKCkpIHsKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZjYWxsYmFja0ZsYWcpOworCisgICAgICAgIC8vIElmIHRoZSBtZW1vcnkgc3RvcmUgaXMg
bm90IGVuYWJsZWQsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdG9yZSB0byB1c2UgYSBwbGlzdCBm
b3IgdGhpcyB0ZXN0LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBOZXR3b3JrUHJvY2Vz
cyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBub3cgbWFrZSBhbm90aGVyIGNh
bGwgaW5pdGlhbGl6aW5nCisgICAgICAgIC8vIHRoZSBtZW1vcnkgc3RvcmUgYW5kIHRlc3Rpbmcg
Z3JhbmRmYXRoZXJpbmcuCisgICAgICAgIGNhbGxiYWNrRmxhZyA9IGZhbHNlOworICAgICAgICBb
ZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tX
ZWJzaXRlRGF0YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgICAgICBBU1NF
UlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRm
YXRoZXJpbmciXSk7CisgICAgICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOworICAgICAgICB9
XTsKKworICAgICAgICBbZGF0YVN0b3JlIF9zZXRVc2VJVFBEYXRhYmFzZTpmYWxzZSBjb21wbGV0
aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAg
ICAgIH1dOworCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwor
ICAgIH0KKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2FsbGJhY2tGbGFnKTsKKwor
ICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0
c0F0UGF0aDp0YXJnZXRVUkwucGF0aF0pOworCisgICAgd2ViVmlldy5jbGVhcigpOworCisgICAg
RVhQRUNUX0VRKChzaXplX3QpMCwgW3NoYXJlZFByb2Nlc3NQb29sIF9wbHVnaW5Qcm9jZXNzQ291
bnRdKTsKK30KKworVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDaGlsZFByb2Nlc3Nlc05v
dExhdW5jaGVkRGF0YWJhc2UpCit7CisgICAgLy8gRW5zdXJlIHRoZSBzaGFyZWQgcHJvY2VzcyBw
b29sIGV4aXN0cyBzbyB0aGUgZGF0YSBzdG9yZSBvcGVyYXRpb25zIHdlJ3JlIGFib3V0IHRvIGRv
IHdvcmsgd2l0aCBpdC4KKyAgICBXS1Byb2Nlc3NQb29sICpzaGFyZWRQcm9jZXNzUG9vbCA9IFtX
S1Byb2Nlc3NQb29sIF9zaGFyZWRQcm9jZXNzUG9vbF07CisKKyAgICBFWFBFQ1RfRVEoKHNpemVf
dCkwLCBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3BsdWdpblByb2Nlc3NDb3VudF0pOworCisgICAgYXV0
byAqZGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXTsKKwor
ICAgIE5TVVJMICpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpbQCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RXZWJLaXRBUEkvV2Vic2l0ZURhdGEvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyIgc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6
WUVTXTsKKyAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW3N0YXRpc3RpY3NEaXJlY3RvcnlVUkwgVVJM
QnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CisKKyAgICBOU1VS
TCAqdGVzdFJlc291cmNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAIkVtcHR5R3JhbmRmYXRoZXJlZFJlc291cmNlTG9hZFN0YXRpc3RpY3MiIHdpdGhFeHRlbnNp
b246QCJwbGlzdCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKwor
ICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6
c3RhdGlzdGljc0RpcmVjdG9yeVVSTCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0
dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5h
Z2VyXSBjb3B5SXRlbUF0VVJMOnRlc3RSZXNvdXJjZVVSTCB0b1VSTDp0YXJnZXRVUkwgZXJyb3I6
bmlsXTsKKworICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDp0YXJnZXRVUkwucGF0aF0pOworCisgICAgc3RhdGljIGJvb2wgY2Fs
bGJhY2tGbGFnOworICAgIHN0YXRpYyBib29sIGRvbmVGbGFnOworCisgICAgW2RhdGFTdG9yZSBf
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFT
dG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgeworICAgICAgICBFWFBFQ1RfVFJVRShbbWVzc2Fn
ZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmciXSk7Cisg
ICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7CisgICAgfV07CisKKyAgICAvLyBXZSBuZWVkIGFu
IGFjdGl2ZSBOZXR3b3JrUHJvY2VzcyB0byBwZXJmb3JtIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mg
b3BlcmF0aW9ucy4KKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgW2RhdGFT
dG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKKyAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiYWJvdXQ6YmxhbmsiXV1dOworCisgICAgaWYgKCFpc0lUUERhdGFiYXNlRW5hYmxl
ZCgpKSB7CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2FsbGJhY2tGbGFnKTsK
KworICAgICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugc3RvcmUgaXMgbm90IGVuYWJsZWQsIHdlIG5l
ZWQgdG8gdXBkYXRlIHRoZSBzdG9yZSB0byB1c2UgYSBkYXRhYmFzZSBpbnN0ZWFkIG9mIGEgcGxp
c3QgZm9yIHRoaXMgdGVzdC4KKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgTmV0d29ya1By
b2Nlc3MgdXAgYW5kIHJ1bm5pbmcgd2l0aCBJVFAgZW5hYmxlZC4gV2Ugbm93IG1ha2UgYW5vdGhl
ciBjYWxsIGluaXRpYWxpemluZworICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugc3RvcmUgYW5kIHRl
c3RpbmcgZ3JhbmRmYXRoZXJpbmcuCisgICAgICAgIGNhbGxiYWNrRmxhZyA9IGZhbHNlOworICAg
ICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNr
Ol4oV0tXZWJzaXRlRGF0YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgICAg
ICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRob3V0
R3JhbmRmYXRoZXJpbmciXSk7CisgICAgICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOworICAg
ICAgICB9XTsKKworICAgICAgICBbZGF0YVN0b3JlIF9zZXRVc2VJVFBEYXRhYmFzZTp0cnVlIGNv
bXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsK
KyAgICAgICAgfV07CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxh
Zyk7CisgICAgfQorCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcp
OwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxl
RXhpc3RzQXRQYXRoOnRhcmdldFVSTC5wYXRoXSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387053</attachid>
            <date>2020-01-07 16:46:13 -0800</date>
            <delta_ts>2020-01-08 11:15:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205844-20200107164612.patch</filename>
            <type>text/plain</type>
            <size>31425</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk5YzM3MjcwMWZjMzMzMDQz
NDQxOWE2ZGE1YjM2NmIxODdhN2Y3ZTcuLjdkZjMwMWE0MjE3MDc0ZDNmYjNmOTE5NDc4ODRhNDY1
OTU0NTI0OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMjAtMDEtMDcgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIElUUCBkYXRh
YmFzZSBiYWNrZW5kIGRvZXMgbm90IGdyYW5kZmF0aGVyIHN0YXRpc3RpY3MgY29ycmVjdGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU4NDQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4MzYwNDUwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsaXR5IGZv
ciBncmFuZGZhdGhlcmluZyBzdGF0aXN0aWNzIHVwb24KKyAgICAgICAgY3JlYXRpb24gb2YgYSBu
ZXcgSVRQIGRhdGFiYXNlIGZpbGUuIFRoZSBtZW1vcnkgc3RvcmUgcmVsaWVzIG9uCisgICAgICAg
IHRoZSBwcmVzZW5jZSBvZiB0aGUgSVRQIHBsaXN0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRh
dGEgc2hvdWxkCisgICAgICAgIGJlIGdyYW5kZmF0aGVyZWQuIFNpbmNlIHRoZSBkYXRhYmFzZSBk
b2VzIG5vdCB1c2UgYSBwbGlzdCwgdGhpcyBwYXRjaAorICAgICAgICBhZGRzIGEgYm9vbGVhbiB2
YXJpYWJsZSB0byB0cmFjayB3aGV0aGVyIHRoZSBkYXRhYmFzZSBmaWxlIHByZXZpb3VzbHkKKyAg
ICAgICAgZXhpc3RlZCBvciBub3QgdG8gaW5kaWNhdGUgd2hlbiB0byBncmFuZGZhdGhlci4KKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6Cisg
ICAgICAgIFRoZSBib29sZWFuIHZhcmlhYmxlIG1fc2hvdWxkR3JhbmRmYXRoZXIgaXMgc2V0IHRv
IHRydWUgaWYgdGhlCisgICAgICAgIGRhdGFiYXNlIGZpbGUgZGlkIG5vdCBwcmV2aW91c2x5IGV4
aXN0LCBpbmRpY2F0aW5nIElUUCBpcyBiZWluZyB1c2VkCisgICAgICAgIGZvciB0aGUgZmlyc3Qg
dGltZSBhbmQgZGF0YSBzaG91bGQgYmUgZ3JhbmRmYXRoZXJlZC4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0
ZU1lbW9yeVN0b3JlRnJvbURpc2spOgorICAgICAgICBUaGlzIGlzIHdoZXJlIHRoZSBncmFuZGZh
dGhlcmluZyBoYXBwZW5zLiBUaGUgY2FsbCB0byBsb2dUZXN0aW5nRXZlbnQKKyAgICAgICAgaXMg
Zm9yIEFQSSB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisKKyAgICAgICAgKFdlYktpdDo6V2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0
ZW50KToKKyAgICAgICAgSWYgYSBzY2hlZHVsZUNsZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50IGlz
IGNhbGxlZCwgdGhlIHBsaXN0IGlzCisgICAgICAgIGRlbGV0ZWQsIGFuZCBkYXRhIHdpbGwgYmUg
Z3JhbmRmYXRoZXJlZCB1cG9uIHJlY3JlYXRpb24uIFRvIG1pbWljCisgICAgICAgIHRoaXMsIHRo
ZSBJVFAgZGF0YWJhc2Ugc3RvcmUgYm9vbGVhbiBpcyBzZXQgdG8gdHJ1ZS4KKworICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5j
ZXNTZXRJc0lUUERhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0SXNJ
VFBEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1t
OgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9pc0lUUERhdGFiYXNlRW5hYmxlZF0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaDoKKyAgICAg
ICAgSW4gb3JkZXIgdG8gcHJvcGVybHkgcnVuIHRoZSBncmFuZGZhdGhlcmluZworICAgICAgICBB
UEkgdGVzdHMsIHRoZSAnaXNJVFBEYXRhYmFzZUVuYWJsZWQnIGJvb2xlYW4gbmVlZHMgdG8gYmUg
ZXhwb3NlZCBmcm9tCisgICAgICAgIFdlYiBQcmVmZXJlbmNlcy4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICBUaGUgQVBJIHRlc3Rz
IHJlbHkgb24gdGhlIElUUCBkYXRhYmFzZSBmbGFnIGJlaW5nIHNldCBjb3JyZWN0bHkuIFNpbmNl
CisgICAgICAgIGJlaW5nIG9uLWJ5LWRlZmF1bHQsIHRoZSBJVFAgZGF0YWJhc2UgZmxhZyBkb2Vz
IG5vdCBzaG93IHVwIGluIHRoZQorICAgICAgICB1c2VyIGRlZmF1bHRzIG1lbnUgaWYgZW5hYmxl
ZC4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ5IGZpcnN0IGNoZWNraW5nIAorICAgICAgICB0byBz
ZWUgaWYgdGhlIHZhbHVlIGlzIGluIHRoZSBkZWZhdWx0cyBtZW51LCBvdGhlcndpc2UgcmV0dXJu
aW5nIHRoZSAKKyAgICAgICAgZGVmYXVsdCBwcmVmZXJlbmNlcyB2YWx1ZS4gVGhpcyBlbnN1cmVz
IHRoZSBwcmVmZXJlbmNlcyB2YWx1ZSBtYXRjaGVzIAorICAgICAgICB0aGUgYWN0dWFsIHN0b3Jl
IGJlaW5nIGluaXRpYWxpemVkLgorCiAyMDIwLTAxLTA2ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9s
bGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBJc3N1ZSBtYWNoIGxvb2t1cCBleHRlbnNp
b24gdG8gbGF1bmNoIHNlcnZpY2VzIGRhZW1vbiBmb3IgTWFpbApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKaW5kZXggNjU0MWE0Y2Ex
NDk2MGFkYmYzMGRiZDJkOTgyNDQ4MWNiZGYxMDZiZi4uMTQyOTllM2ZiMDUzMDQyMjMxMjE4MzMx
YTAxOGVjYzZkYWUyZjhiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCkBAIC0zMDksNiArMzA5LDExIEBAIFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VT
dG9yZShXZWJSZXNvCiAKIHZvaWQgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6
Om9wZW5JVFBEYXRhYmFzZSgpCiB7CisgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKG1f
c3RvcmFnZURpcmVjdG9yeVBhdGgpKQorICAgICAgICBtX3Nob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcyA9IHRydWU7CisgICAgZWxzZQorICAgICAgICBtX3Nob3VsZEdyYW5kZmF0aGVyU3RhdGlz
dGljcyA9IGZhbHNlOworCiAgICAgaWYgKCFtX2RhdGFiYXNlLm9wZW4obV9zdG9yYWdlRGlyZWN0
b3J5UGF0aCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiVwIC0gUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6Om9wZW4gZmFpbGVkLCBlcnJvciBtZXNz
YWdlOiAle3B1YmxpY31zLCBkYXRhYmFzZSBwYXRoOiAle3B1YmxpY31zIiwgdGhpcywgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSwgbV9zdG9yYWdlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgp
KTsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCmluZGV4IDliMzEwZWMzYzZmMDVkMzI0
Y2NlNDM1MzE1MjcwNmRiNGNhNmYxMmYuLjNjOWFjODk0NWJhN2RlOTY1ZGYyNDc1MWMyMzhlNmJm
OTI2ODc3ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3Np
Zmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0
YWJhc2VTdG9yZS5oCkBAIC0xMzUsNiArMTM1LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNDb3Jy
ZWN0U3ViU3RhdGlzdGljc0NvdW50KGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWluJiwgY29uc3QgVG9w
RnJhbWVEb21haW4mKTsKICAgICB2b2lkIHJlc291cmNlVG9TdHJpbmcoU3RyaW5nQnVpbGRlciYs
IGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIFNlY29uZHMgZ2V0TW9zdFJlY2VudGx5VXBkYXRl
ZFRpbWVzdGFtcChjb25zdCBSZWdpc3RyYWJsZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWlu
JikgY29uc3Q7CisgICAgYm9vbCBzaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MoKSB7IHJldHVy
biBtX3Nob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczsgfQorICAgIHZvaWQgc2V0U2hvdWxkR3Jh
bmRmYXRoZXJTdGF0aXN0aWNzKGJvb2wgc2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzKSB7IG1f
c2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzID0gc2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNz
OyB9CiAKIHByaXZhdGU6CiAgICAgdm9pZCBvcGVuSVRQRGF0YWJhc2UoKTsKQEAgLTI1Niw2ICsy
NTgsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50IG1f
c3RvcmFnZUFjY2Vzc0V4aXN0c1N0YXRlbWVudDsKICAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0
ZVN0YXRlbWVudCBtX2dldE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXBTdGF0ZW1lbnQ7CiAg
ICAgUEFMOjpTZXNzaW9uSUQgbV9zZXNzaW9uSUQ7CisgICAgYm9vbCBtX3Nob3VsZEdyYW5kZmF0
aGVyU3RhdGlzdGljcyB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKaW5kZXggODIz
OWQ2ZDlmNWY5NDI1MGE4MTE1ZTBlMzUxOTgyOWY5ZGRmZDE4MC4uZmVkODkyMGVmZDdmMWUxOGRk
ODI3YmVmYWRhMmUwNWRmYzkzYzkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHAKQEAgLTIzMCw3ICsyMzAsMTkgQEAgdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnBvcHVsYXRlTWVtb3J5U3RvcmVGcm9tRGlzayhDb21wbGV0
aW9uSGFuZGwKICAgICAgICAgICAgIG1fcGVyc2lzdGVudFN0b3JhZ2UtPnBvcHVsYXRlTWVtb3J5
U3RvcmVGcm9tRGlzayhbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CiAgICAgICAgICAgICB9KTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmIChpczxS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKSkg
eworICAgICAgICAgICAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUmIGRhdGFi
YXNlU3RvcmUgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4o
Km1fc3RhdGlzdGljc1N0b3JlKTsKKyAgICAgICAgICAgIGlmIChkYXRhYmFzZVN0b3JlLnNob3Vs
ZEdyYW5kZmF0aGVyU3RhdGlzdGljcygpKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNz
U3RvcmUtPmdyYW5kZmF0aGVyRXhpc3RpbmdXZWJzaXRlRGF0YShbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVw
bHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIGRhdGFiYXNlU3RvcmUuc2V0U2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNz
KGZhbHNlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVw
bHkoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBwcm90ZWN0ZWRUaGlzLmNvcHlSZWYoKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgICAgICAgICAgICAgbG9nVGVzdGluZ0V2ZW50KCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRm
YXRoZXJpbmciX3MpOworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBvc3RUYXNr
UmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtOTM5LDYg
Kzk1MSw4IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNs
ZWFySW5NZW1vcnlBbmRQZXJzaXN0ZW50KFNob3VsZEdyCiAgICAgcG9zdFRhc2soW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2hvdWxkR3JhbmRmYXRoZXIsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAg
ICAgIGlmIChtX3BlcnNpc3RlbnRTdG9yYWdlKQogICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3Rv
cmFnZS0+Y2xlYXIoKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpCisgICAgICAgICAgICBkb3duY2Fz
dDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3Jl
KS5zZXRTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3ModHJ1ZSk7CiAKICAgICAgICAgaWYgKCFt
X3N0YXRpc3RpY3NTdG9yZSkgewogICAgICAgICAgICAgaWYgKHNob3VsZEdyYW5kZmF0aGVyID09
IFNob3VsZEdyYW5kZmF0aGVyU3RhdGlzdGljczo6WWVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAppbmRleCBhYzMxYTZlNDE1MTE0M2I1NWYz
NmEyNjA3NDc1ZDQ5ZjZhODZjNWQwLi5mNTFjNDBlNGZiZjVkYmVhNzFkZDgyOWI2ZDYyMzdlMmM4
NDNlMmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVu
Y2VzLmNwcApAQCAtMTE4LDYgKzExOCwxNiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRMb2Fkc1Np
dGVJY29uc0lnbm9yaW5nSW1hZ2VMb2FkaW5nUHJlZmVyZW5jZShXS1ByZWZlcmVuY2VzUgogICAg
IHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5sb2Fkc1NpdGVJY29uc0lnbm9yaW5nSW1h
Z2VMb2FkaW5nUHJlZmVyZW5jZSgpOwogfQogCit2b2lkIFdLUHJlZmVyZW5jZXNTZXRJc0lUUERh
dGFiYXNlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGlzSVRQ
RGF0YWJhc2VFbmFibGVkKQoreworICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldElzSVRQ
RGF0YWJhc2VFbmFibGVkKGlzSVRQRGF0YWJhc2VFbmFibGVkKTsKK30KKworYm9vbCBXS1ByZWZl
cmVuY2VzR2V0SXNJVFBEYXRhYmFzZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aXNJVFBEYXRhYmFz
ZUVuYWJsZWQoKTsKK30KKwogdm9pZCBXS1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgb2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKQogewogICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChvZmZsaW5lV2ViQXBw
bGljYXRpb25DYWNoZUVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlc1JlZi5oCmluZGV4IDEwOGRmNzk0Y2Y3OTAxYzAzMjg1NzllODU5NjFm
ZTg5NTgwNTI0ZDkuLmY3MzljNzhmMDA2ODc3MGU0NTUxM2I4MmYwZmNjZGVjMzZjMTFkZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWYu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmLmgK
QEAgLTc3LDYgKzc3LDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRMb2Fkc0lt
YWdlc0F1dG9tYXRpY2FsbHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlCiBXS19FWFBPUlQgdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0TG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZl
cmVuY2UoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcywgYm9vbCBsb2Fkc1NpdGVJY29uc0ln
bm9yaW5nSW1hZ2VMb2FkaW5nUHJlZmVyZW5jZSk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0TG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CiAKKy8vIERlZmF1bHRzIHRvIHRydWUuCitXS19FWFBP
UlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0SXNJVFBEYXRhYmFzZUVuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlcywgYm9vbCBpc0lUUERhdGFiYXNlRW5hYmxlZCk7CitXS19FWFBPUlQg
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0SXNJVFBEYXRhYmFzZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlcyk7CisKIC8vIERlZmF1bHRzIHRvIHRydWUuCiBXS19FWFBPUlQgdm9pZCBX
S1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wgb2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRPZmZsaW5lV2ViQXBwbGljYXRp
b25DYWNoZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbSBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCmluZGV4IGFi
NzNjNTlmNzFmZmEzOWEyMjBjZTBiNWM4ZDE0ZmZkODc0ZDU3ZjYuLjZjNTEzY2E0NGNjZDM1MmM3
NmE5M2Y4MDFmZGY2YmRmMzM3NDc4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCkBAIC05MDIsNiArOTAyLDExIEBAIC0gKHZv
aWQpX3NldFJlbW90ZVBsYXliYWNrRW5hYmxlZDooQk9PTCllbmFibGVkCiAgICAgX3ByZWZlcmVu
Y2VzLT5zZXRSZW1vdGVQbGF5YmFja0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKy0gKEJPT0wpX2lz
SVRQRGF0YWJhc2VFbmFibGVkCit7CisgICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+aXNJVFBEYXRh
YmFzZUVuYWJsZWQoKTsKK30KKwogI2lmIFBMQVRGT1JNKE1BQykKIC0gKHZvaWQpX3NldEphdmFF
bmFibGVkRm9yTG9jYWxGaWxlczooQk9PTCllbmFibGVkCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4
IGI4NDllY2RmOTc1ZmYxZGE1MWYzZjhjNTYwODgzNDAwYWExZWYwZGMuLjViNDM4ZTI1N2QzYjVi
ZDZmM2I3OGZlZmUzY2M4MjMwM2M1MjU1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC0xNjEsNiAr
MTYxLDcgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLRWRpdGFibGVMaW5rQmVoYXZp
b3IpIHsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFdlYkF1ZGlvRW5hYmxlZDop
IEJPT0wgX3dlYkF1ZGlvRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9z
KFdLX0lPU19UQkEpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkOikgQk9PTCBfYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKFdLX0lPU19UQkEpKTsKIEBw
cm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFJlcXVlc3RBbmltYXRpb25GcmFtZUVuYWJs
ZWQ6KSBCT09MIF9yZXF1ZXN0QW5pbWF0aW9uRnJhbWVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitAcHJvcGVydHkgKG5vbmF0b21p
YywgcmVhZG9ubHkpIEJPT0wgX2lzSVRQRGF0YWJhc2VFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoV0tfTUFDX1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKICNpZiAhVEFSR0VUX09TX0lQ
SE9ORQogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2ViR0xFbmFibGVkOikgQk9P
TCBfd2ViR0xFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
aW5kZXggYzcwY2RhY2JhY2VjYWZhOGNjZDcwNTM2YzE1YjRlZjdhZjU5MWQxZi4uNzg5ZjMxOTc1
MDU5NGQzMWE1OTczYTljYjM4ODc5ODY3ZjVhOTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC00MDEsNyArNDAx
LDExIEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9j
ZXNzKE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhCiAgICAgcGFyYW1ldGVycy5zdG9yYWdlQWNj
ZXNzQVBJRW5hYmxlZCA9IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7CiAgICAgcGFyYW1ldGVy
cy5zdXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UgPSBtX2NvbmZp
Z3VyYXRpb24tPnN1cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZSgp
OwogCi0gICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IFtkZWZhdWx0cyBi
b29sRm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwg
V2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKV1dOworICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtkZWZh
dWx0cyBvYmplY3RGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJJbnRlcm5hbERl
YnVnJUAiLCBXZWJQcmVmZXJlbmNlc0tleTo6aXNJVFBEYXRhYmFzZUVuYWJsZWRLZXkoKS5jcmVh
dGVDRlN0cmluZygpLmdldCgpXV07CisgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQorICAg
ICAgICBwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZUlUUERhdGFiYXNlID0gZGF0YWJhc2VFbmFibGVk
VmFsdWUuYm9vbFZhbHVlOworICAgIGVsc2UKKyAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSA9IG1fZGVmYXVsdFBhZ2VHcm91cC0+cHJlZmVyZW5jZXMoKS5pc0lUUERh
dGFiYXNlRW5hYmxlZCgpOwogCiAgICAgcGFyYW1ldGVycy5lbmFibGVBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGUgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIkV4cGVyaW1lbnRhbCVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmFkQ2xpY2tBdHRyaWJ1
dGlvbkRlYnVnTW9kZUVuYWJsZWRLZXkoKS5jcmVhdGVDRlN0cmluZygpLmdldCgpXV07CiB9CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmZmOWJk
Yjg2Yjc3YzY0OWMyZmU4NjQyYjM4NmJkYTEzYzY5YTRhZS4uZTJhYzlkMmFhODViYTVjYWE0ZTM3
MzgzZmNhYWIwYWIxODRjZGE4MiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTAxLTA3ICBLYXRlIENoZW5leSAg
PGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBJVFAgZGF0YWJhc2Ug
YmFja2VuZCBkb2VzIG5vdCBncmFuZGZhdGhlciBzdGF0aXN0aWNzIGNvcnJlY3RseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1ODQ0CisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS81ODM2MDQ1MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0byB0ZXN0IGJvdGggdGhlIElUUCBkYXRhYmFz
ZSBhbmQgbWVtb3J5IHN0b3JlcywgdGhpcyBwYXRjaAorICAgICAgICBoYWQgdG8gcmVzdHJ1Y3R1
cmUgdGhlIGdyYW5kZmF0aGVyaW5nIEFQSSB0ZXN0cy4KKworICAgICAgICBJZiB0aGUgdGVzdCBp
cyBmb3IgdGhlIGRhdGFiYXNlIGJhY2tlbmQgKGVuZHMgaW4gKkRhdGFiYXNlKSwgaXQgd2lsbAor
ICAgICAgICBjaGVjayBpZiB0aGUgZGVmYXVsdCBzdG9yZSBtYXRjaGVzLiBJZiBzbywgaXQgY29u
dGludWVzIG9uIHdpdGggdGhlCisgICAgICAgIG5vcm1hbCB0ZXN0LiBJZiBub3QsIGl0IGhhcyB0
byB1c2UgYW4gQVBJIGNhbGwgdG8gcmVjb25zdHJ1Y3QgdGhlCisgICAgICAgIG5ldyBzdG9yZSBh
bmQgZW5zdXJlIHRoZSBncmFuZGZhdGhlcmluZyBzdGlsbCBoYXBwZW5zLiBWaWNlIHZlcnNhIGZv
cgorICAgICAgICB0aGUgbWVtb3J5IHN0b3JlIHRlc3RzLgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tOgorICAgICAg
ICAoaXNJVFBEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAoVEVTVCk6CisKIDIwMjAtMDEtMDYg
IFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIElz
c3VlIG1hY2ggbG9va3VwIGV4dGVuc2lvbiB0byBsYXVuY2ggc2VydmljZXMgZGFlbW9uIGZvciBN
YWlsCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMmQyNzlmYjUxYTFhNTQyNzQz
MTY1Mzg5N2I3ZmRlOTg4MmFkZDA5Yi4uOWM2MDBiZDkzZjE2ODEzYzNiMjkxZDkxZTNkMTU2MTI3
NGRmMWNmZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNjksNiArNjksMTkg
QEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmlzaE5hdmlnYXRp
b246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXQKIAogQGVuZAogCitib29sIGlzSVRQRGF0YWJhc2VF
bmFibGVkKCkKK3sKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVmYXVs
dHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgYXV0byBkZWZh
dWx0RGF0YWJhc2VFbmFibGVkID0gW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLl9pc0lUUERh
dGFiYXNlRW5hYmxlZDsKKworICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRWYWx1ZSA9IFtk
ZWZhdWx0cyBvYmplY3RGb3JLZXk6QCJJbnRlcm5hbERlYnVnSXNJVFBEYXRhYmFzZUVuYWJsZWQi
XTsKKyAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCisgICAgICAgIHJldHVybiBkYXRhYmFz
ZUVuYWJsZWRWYWx1ZS5ib29sVmFsdWU7CisKKyAgICByZXR1cm4gZGVmYXVsdERhdGFiYXNlRW5h
YmxlZDsKK30KKwogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxi
YWNrKQogewogICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3RvcmUgZGVmYXVs
dERhdGFTdG9yZV07CkBAIC04Myw3ICs5Niw5IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgR3JhbmRmYXRoZXJDYWxsYmFjaykKICAgICBzdGF0aWMgYm9vbCBncmFuZGZhdGhlcmVkRmxh
ZzsKIAogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKLSAgICAg
ICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiR3JhbmRmYXRoZXJlZCJd
KTsKKyAgICAgICAgLy8gT25seSBpZiB0aGUgbWVtb3J5IHN0b3JlIGlzIGVuYWJsZWQgZG8gd2Ug
bmVlZCB0byBjaGVjayB0aGF0IHRoaXMgZmlyc3QgbWVzc2FnZSBpcyBjb3JyZWN0CisgICAgICAg
IGlmICghaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFtt
ZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIkdyYW5kZmF0aGVyZWQiXSk7CiAgICAgICAgIGdyYW5k
ZmF0aGVyZWRGbGFnID0gdHJ1ZTsKICAgICB9XTsKIApAQCAtOTIsNiArMTA3LDI1IEBAIFRFU1Qo
UmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFjaykKICAgICBbZGF0YVN0
b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogICAgIFt3ZWJWaWV3
IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhT
dHJpbmc6QCJhYm91dDpibGFuayJdXV07CiAKKyAgICBpZiAoaXNJVFBEYXRhYmFzZUVuYWJsZWQo
KSkgeworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRGbGFn
KTsKKworICAgICAgICAvLyBJZiB0aGUgbWVtb3J5IHN0b3JlIGlzIG5vdCBlbmFibGVkLCB3ZSBu
ZWVkIHRvIHVwZGF0ZSB0aGUgc3RvcmUgdG8gdXNlIGEgcGxpc3QgZm9yIHRoaXMgdGVzdC4KKyAg
ICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgTmV0d29ya1Byb2Nlc3MgdXAgYW5kIHJ1bm5pbmcg
d2l0aCBJVFAgZW5hYmxlZC4gV2Ugbm93IG1ha2UgYW5vdGhlciBjYWxsIGluaXRpYWxpemluZwor
ICAgICAgICAvLyB0aGUgbWVtb3J5IHN0b3JlIGFuZCB0ZXN0aW5nIGdyYW5kZmF0aGVyaW5nLgor
ICAgICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IGZhbHNlOworICAgICAgICBbZGF0YVN0b3JlIF9z
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0
b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShbbWVz
c2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJHcmFuZGZhdGhlcmVkIl0pOworICAgICAgICAgICAgZ3Jh
bmRmYXRoZXJlZEZsYWcgPSB0cnVlOworICAgICAgICB9XTsKKworICAgICAgICBbZGF0YVN0b3Jl
IF9zZXRVc2VJVFBEYXRhYmFzZTpmYWxzZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7Cisg
ICAgICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAgICAgIH1dOworCisgICAgICAgIFRlc3RX
ZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOworICAgIH0KKwogICAgIFRlc3RXZWJLaXRB
UEk6OlV0aWw6OnJ1bigmZ3JhbmRmYXRoZXJlZEZsYWcpOwogCiAgICAgLy8gU3BpbiB0aGUgcnVu
bG9vcCB1bnRpbCB0aGUgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzIGZpbGUgaGFzIHdyaXR0ZW4g
dG8gZGlzay4KQEAgLTEwMyw2ICsxMzcsNyBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3Ms
IEdyYW5kZmF0aGVyQ2FsbGJhY2spCiAgICAgfQogCiAgICAgZ3JhbmRmYXRoZXJlZEZsYWcgPSBm
YWxzZTsKKyAgICBkb25lRmxhZyA9IGZhbHNlOwogICAgIFtkYXRhU3RvcmUgcmVtb3ZlRGF0YU9m
VHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsV2Vic2l0ZURhdGFUeXBlc0luY2x1ZGluZ1By
aXZhdGVdICBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRpb25IYW5k
bGVyOl4gewogICAgICAgICBkb25lRmxhZyA9IHRydWU7CiAgICAgfV07CkBAIC0xMzQsNiArMTY5
LDgzIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFjaykK
ICAgICB9CiB9CiAKK1RFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxs
YmFja0RhdGFiYXNlKQoreworICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3Rv
cmUgZGVmYXVsdERhdGFTdG9yZV07CisKKyAgICBOU1VSTCAqc3RhdGlzdGljc0RpcmVjdG9yeVVS
TCA9IFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W0Aifi9MaWJyYXJ5L1dlYktpdC9UZXN0V2ViS2l0
QVBJL1dlYnNpdGVEYXRhL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MiIHN0cmluZ0J5RXhwYW5kaW5n
VGlsZGVJblBhdGhdIGlzRGlyZWN0b3J5OllFU107CisgICAgTlNVUkwgKmZpbGVVUkwgPSBbc3Rh
dGlzdGljc0RpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZh
dGlvbnMuZGIiXTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0
ZW1BdFVSTDpmaWxlVVJMIGVycm9yOm5pbF07CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRN
YW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6c3RhdGlzdGljc0RpcmVjdG9yeVVSTCBlcnJvcjpuaWxd
OworICAgIEVYUEVDVF9GQUxTRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVF
eGlzdHNBdFBhdGg6c3RhdGlzdGljc0RpcmVjdG9yeVVSTC5wYXRoXSk7CisKKyAgICBzdGF0aWMg
Ym9vbCBncmFuZGZhdGhlcmVkRmxhZzsKKyAgICBzdGF0aWMgYm9vbCBkb25lRmxhZzsKKworICAg
IFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihX
S1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgLy8gT25s
eSBpZiB0aGUgZGF0YWJhc2Ugc3RvcmUgaXMgZW5hYmxlZCBkbyB3ZSBuZWVkIHRvIGNoZWNrIHRo
YXQgdGhpcyBmaXJzdCBtZXNzYWdlIGlzIGNvcnJlY3QKKyAgICAgICAgaWYgKGlzSVRQRGF0YWJh
c2VFbmFibGVkKCkpCisgICAgICAgICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9T
dHJpbmc6QCJHcmFuZGZhdGhlcmVkIl0pOworICAgICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IHRy
dWU7CisgICAgfV07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgW2Rh
dGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKKyAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiYWJvdXQ6YmxhbmsiXV1dOworCisgICAgaWYgKCFpc0lUUERhdGFiYXNlRW5h
YmxlZCgpKSB7CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRmYXRoZXJl
ZEZsYWcpOworCisgICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBub3QgZW5hYmxl
ZCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVzZSBhIGRhdGFiYXNlIGluc3RlYWQg
b2YgYSBwbGlzdCBmb3IgdGhpcyB0ZXN0LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBO
ZXR3b3JrUHJvY2VzcyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBub3cgbWFr
ZSBhbm90aGVyIGNhbGwgaW5pdGlhbGl6aW5nCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZSBzdG9y
ZSBhbmQgdGVzdGluZyBncmFuZGZhdGhlcmluZy4KKyAgICAgICAgZ3JhbmRmYXRoZXJlZEZsYWcg
PSBmYWxzZTsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rl
c3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkg
eworICAgICAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiR3Jh
bmRmYXRoZXJlZCJdKTsKKyAgICAgICAgICAgIGdyYW5kZmF0aGVyZWRGbGFnID0gdHJ1ZTsKKyAg
ICAgICAgfV07CisKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0VXNlSVRQRGF0YWJhc2U6dHJ1ZSBj
b21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBkb25lRmxhZyA9IHRydWU7
CisgICAgICAgIH1dOworCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZs
YWcpOworICAgIH0KKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRmYXRoZXJl
ZEZsYWcpOworCisgICAgLy8gU3BpbiB0aGUgcnVubG9vcCB1bnRpbCB0aGUgcmVzb3VyY2UgbG9h
ZCBzdGF0aXN0aWNzIGZpbGUgaGFzIHdyaXR0ZW4gdG8gZGlzay4KKyAgICAvLyBJZiB0aGUgdGVz
dCBlbnRlcnMgYSBzcGluIGxvb3AgaGVyZSwgaXQgaGFzIGZhaWxlZC4KKyAgICB3aGlsZSAodHJ1
ZSkgeworICAgICAgICBpZiAoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhp
c3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgVGVz
dFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CisgICAgfQorCisgICAgZ3JhbmRmYXRo
ZXJlZEZsYWcgPSBmYWxzZTsKKyAgICBkb25lRmxhZyA9IGZhbHNlOworICAgIFtkYXRhU3RvcmUg
cmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsV2Vic2l0ZURhdGFUeXBl
c0luY2x1ZGluZ1ByaXZhdGVdICBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNv
bXBsZXRpb25IYW5kbGVyOl4geworICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAgfV07CisK
KyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKKyAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CisKKyAgICAvLyBUaGUgd2Vic2l0ZSBkYXRhIHN0
b3JlIHJlbW92ZSBzaG91bGQgaGF2ZSBjb21wbGV0ZWQsIGJ1dCBzaW5jZSB3ZSByZW1vdmVkIGFs
bCBvZiB0aGUgZGF0YSB0eXBlcyB0aGF0IGFyZSBtb25pdG9yZWQgYnkgcmVzb3VyY2UgbG9hZCBz
dGF0aXN0aWNzLAorICAgIC8vIG5vIGdyYW5kZmF0aGVyaW5nIGNhbGwgc2hvdWxkIGhhdmUgYmVl
biBtYWRlLiBOb3RlIHRoYXQgdGhlIGRhdGFiYXNlIGZpbGUgd2lsbCBub3QgYmUgZGVsZXRlZCBs
aWtlIGluIHRoZSBwZXJzaXN0ZW50IHN0b3JhZ2UgY2FzZSwgb25seSBjbGVhcmVkLgorICAgIEVY
UEVDVF9GQUxTRShncmFuZGZhdGhlcmVkRmxhZyk7CisKKyAgICBkb25lRmxhZyA9IGZhbHNlOwor
ICAgIFtkYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmplY3RzOldL
V2Vic2l0ZURhdGFUeXBlQ29va2llcywgX1dLV2Vic2l0ZURhdGFUeXBlUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNvbXBsZXRp
b25IYW5kbGVyOl4geworICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAgfV07CisKKyAgICAv
LyBTaW5jZSB3ZSBkaWQgbm90IHJlbW92ZSBldmVyeSBkYXRhIHR5cGUgY292ZXJlZCBieSByZXNv
dXJjZSBsb2FkIHN0YXRpc3RpY3MsIHdlIGRvIGV4cGVjdCB0aGF0IGdyYW5kZmF0aGVyaW5nIHRv
b2sgcGxhY2UgYWdhaW4uCisgICAgLy8gSWYgdGhlIHRlc3QgaGFuZ3Mgd2FpdGluZyBvbiBlaXRo
ZXIgb2YgdGhlc2UgY29uZGl0aW9ucywgaXQgaGFzIGZhaWxlZC4KKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmRvbmVGbGFnKTsKK30KKwogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBTaG91
bGROb3RHcmFuZGZhdGhlck9uU3RhcnR1cCkKIHsKICAgICBhdXRvICpkYXRhU3RvcmUgPSBbV0tX
ZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOwpAQCAtMTQ4LDggKzI2MCw2MiBAQCBU
RVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdyYW5kZmF0aGVyT25TdGFydHVw
KQogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4
aXN0c0F0UGF0aDp0YXJnZXRVUkwucGF0aF0pOwogCiAgICAgc3RhdGljIGJvb2wgY2FsbGJhY2tG
bGFnOworICAgIHN0YXRpYyBib29sIGRvbmVGbGFnOworCisgICAgW2RhdGFTdG9yZSBfc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAq
LCBOU1N0cmluZyAqbWVzc2FnZSkgeworICAgICAgICAvLyBPbmx5IGlmIHRoZSBtZW1vcnkgc3Rv
cmUgaXMgZW5hYmxlZCBkbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhpcyBmaXJzdCBtZXNzYWdl
IGlzIGNvcnJlY3QKKyAgICAgICAgaWYgKCFpc0lUUERhdGFiYXNlRW5hYmxlZCgpKQorICAgICAg
ICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9wdWxhdGVkV2l0
aG91dEdyYW5kZmF0aGVyaW5nIl0pOworICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOworICAg
IH1dOworCisgICAgLy8gV2UgbmVlZCBhbiBhY3RpdmUgTmV0d29ya1Byb2Nlc3MgdG8gcGVyZm9y
bSBSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIG9wZXJhdGlvbnMuCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1dLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAs
IDgwMCwgNjAwKV0pOworICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkOllFU107CisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1
ZXN0V2l0aFVSTDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl1dXTsKKworICAg
IGlmIChpc0lUUERhdGFiYXNlRW5hYmxlZCgpKSB7CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmY2FsbGJhY2tGbGFnKTsKKworICAgICAgICAvLyBJZiB0aGUgbWVtb3J5IHN0b3Jl
IGlzIG5vdCBlbmFibGVkLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RvcmUgdG8gdXNlIGEgcGxp
c3QgZm9yIHRoaXMgdGVzdC4KKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgTmV0d29ya1By
b2Nlc3MgdXAgYW5kIHJ1bm5pbmcgd2l0aCBJVFAgZW5hYmxlZC4gV2Ugbm93IG1ha2UgYW5vdGhl
ciBjYWxsIGluaXRpYWxpemluZworICAgICAgICAvLyB0aGUgbWVtb3J5IHN0b3JlIGFuZCB0ZXN0
aW5nIGdyYW5kZmF0aGVyaW5nLgorICAgICAgICBjYWxsYmFja0ZsYWcgPSBmYWxzZTsKKyAgICAg
ICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpe
KFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgeworICAgICAgICAgICAg
QVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9wdWxhdGVkV2l0aG91dEdy
YW5kZmF0aGVyaW5nIl0pOworICAgICAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsKKyAgICAg
ICAgfV07CisKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0VXNlSVRQRGF0YWJhc2U6ZmFsc2UgY29t
cGxldGlvbkhhbmRsZXI6IF4odm9pZCkgeworICAgICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwor
ICAgICAgICB9XTsKKworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFn
KTsKKyAgICB9CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNrRmxhZyk7
Cit9CisKK1RFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgU2hvdWxkTm90R3JhbmRmYXRoZXJP
blN0YXJ0dXBEYXRhYmFzZSkKK3sKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbV0tXZWJzaXRlRGF0
YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOworCisgICAgTlNVUkwgKnN0YXRpc3RpY3NEaXJlY3Rv
cnlVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltAIn4vTGlicmFyeS9XZWJLaXQvVGVzdFdl
YktpdEFQSS9XZWJzaXRlRGF0YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzIiBzdHJpbmdCeUV4cGFu
ZGluZ1RpbGRlSW5QYXRoXSBpc0RpcmVjdG9yeTpZRVNdOworICAgIE5TVVJMICp0YXJnZXRVUkwg
PSBbc3RhdGlzdGljc0RpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJv
YnNlcnZhdGlvbnMuZGIiXTsKKyAgICBOU1VSTCAqdGVzdFJlc291cmNlVVJMID0gW1tOU0J1bmRs
ZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAIkVtcHR5R3JhbmRmYXRoZXJlZFJlc291cmNl
TG9hZFN0YXRpc3RpY3MiIHdpdGhFeHRlbnNpb246QCJwbGlzdCIgc3ViZGlyZWN0b3J5OkAiVGVz
dFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFu
YWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6c3RhdGlzdGljc0RpcmVjdG9yeVVSTCB3aXRoSW50
ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJpYnV0ZXM6bmlsIGVycm9yOm5pbF07CisgICAg
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjb3B5SXRlbUF0VVJMOnRlc3RSZXNvdXJj
ZVVSTCB0b1VSTDp0YXJnZXRVUkwgZXJyb3I6bmlsXTsKKworICAgIEVYUEVDVF9UUlVFKFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp0YXJnZXRVUkwucGF0
aF0pOworCisgICAgc3RhdGljIGJvb2wgY2FsbGJhY2tGbGFnOworICAgIHN0YXRpYyBib29sIGRv
bmVGbGFnOworCiAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3Rp
bmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgewot
ICAgICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRX
aXRob3V0R3JhbmRmYXRoZXJpbmciXSk7CisgICAgICAgIC8vIE9ubHkgaWYgdGhlIGRhdGFiYXNl
IHN0b3JlIGlzIGVuYWJsZWQgZG8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoaXMgZmlyc3QgbWVz
c2FnZSBpcyBjb3JyZWN0CisgICAgICAgIGlmIChpc0lUUERhdGFiYXNlRW5hYmxlZCgpKQorICAg
ICAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9wdWxhdGVk
V2l0aG91dEdyYW5kZmF0aGVyaW5nIl0pOwogICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOwog
ICAgIH1dOwogCkBAIC0xNTgsNiArMzI0LDI1IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGlj
cywgU2hvdWxkTm90R3JhbmRmYXRoZXJPblN0YXJ0dXApCiAgICAgW2RhdGFTdG9yZSBfc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYWJv
dXQ6YmxhbmsiXV1dOwogCisgICAgaWYgKCFpc0lUUERhdGFiYXNlRW5hYmxlZCgpKSB7CisgICAg
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2FsbGJhY2tGbGFnKTsKKworICAgICAgICAv
LyBJZiB0aGUgZGF0YWJhc2Ugc3RvcmUgaXMgbm90IGVuYWJsZWQsIHdlIG5lZWQgdG8gdXBkYXRl
IHRoZSBzdG9yZSB0byB1c2UgYSBkYXRhYmFzZSBpbnN0ZWFkIG9mIGEgcGxpc3QgZm9yIHRoaXMg
dGVzdC4KKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgTmV0d29ya1Byb2Nlc3MgdXAgYW5k
IHJ1bm5pbmcgd2l0aCBJVFAgZW5hYmxlZC4gV2Ugbm93IG1ha2UgYW5vdGhlciBjYWxsIGluaXRp
YWxpemluZworICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugc3RvcmUgYW5kIHRlc3RpbmcgZ3JhbmRm
YXRoZXJpbmcuCisgICAgICAgIGNhbGxiYWNrRmxhZyA9IGZhbHNlOworICAgICAgICBbZGF0YVN0
b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRl
RGF0YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgICAgICBBU1NFUlRfVFJV
RShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJp
bmciXSk7CisgICAgICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOworICAgICAgICB9XTsKKwor
ICAgICAgICBbZGF0YVN0b3JlIF9zZXRVc2VJVFBEYXRhYmFzZTp0cnVlIGNvbXBsZXRpb25IYW5k
bGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07
CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQor
CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOwogfQogCkBAIC0x
NzQsMTUgKzM1OSw4MCBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENoaWxkUHJvY2Vz
c2VzTm90TGF1bmNoZWQpCiAgICAgTlNVUkwgKnRhcmdldFVSTCA9IFtzdGF0aXN0aWNzRGlyZWN0
b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImZ1bGxfYnJvd3Npbmdfc2Vzc2lv
bl9yZXNvdXJjZUxvZy5wbGlzdCJdOwogICAgIE5TVVJMICp0ZXN0UmVzb3VyY2VVUkwgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiRW1wdHlHcmFuZGZhdGhlcmVkUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyIgd2l0aEV4dGVuc2lvbjpAInBsaXN0IiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwogCisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFVSTDpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMIHdp
dGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsK
KyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvcHlJdGVtQXRVUkw6dGVzdFJl
c291cmNlVVJMIHRvVVJMOnRhcmdldFVSTCBlcnJvcjpuaWxdOworICAgIAorICAgIEVYUEVDVF9U
UlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDp0YXJn
ZXRVUkwucGF0aF0pOworCisgICAgc3RhdGljIGJvb2wgY2FsbGJhY2tGbGFnOworICAgIHN0YXRp
YyBib29sIGRvbmVGbGFnOworICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3Nh
Z2UpIHsKKyAgICAgICAgLy8gT25seSBpZiB0aGUgbWVtb3J5IHN0b3JlIGlzIGVuYWJsZWQgZG8g
d2UgbmVlZCB0byBjaGVjayB0aGF0IHRoaXMgZmlyc3QgbWVzc2FnZSBpcyBjb3JyZWN0CisgICAg
ICAgIGlmICghaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmlu
ZyJdKTsKKyAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIC8vIFdl
IG5lZWQgYW4gYWN0aXZlIE5ldHdvcmtQcm9jZXNzIHRvIHBlcmZvcm0gUmVzb3VyY2VMb2FkU3Rh
dGlzdGljcyBvcGVyYXRpb25zLgorICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAg
ICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOworICAg
IFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdXV07CisKKyAgICBpZiAoaXNJVFBEYXRhYmFz
ZUVuYWJsZWQoKSkgeworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNr
RmxhZyk7CisKKyAgICAgICAgLy8gSWYgdGhlIG1lbW9yeSBzdG9yZSBpcyBub3QgZW5hYmxlZCwg
d2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVzZSBhIHBsaXN0IGZvciB0aGlzIHRlc3Qu
CisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNzIHVwIGFuZCBydW5u
aW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2FsbCBpbml0aWFsaXpp
bmcKKyAgICAgICAgLy8gdGhlIG1lbW9yeSBzdG9yZSBhbmQgdGVzdGluZyBncmFuZGZhdGhlcmlu
Zy4KKyAgICAgICAgY2FsbGJhY2tGbGFnID0gZmFsc2U7CisgICAgICAgIFtkYXRhU3RvcmUgX3Nl
dFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3Rv
cmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNz
YWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsK
KyAgICAgICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7CisgICAgICAgIH1dOworCisgICAgICAg
IFtkYXRhU3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOmZhbHNlIGNvbXBsZXRpb25IYW5kbGVyOiBe
KHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07CisKKyAg
ICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQorCisgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOworCisgICAgRVhQRUNUX1RS
VUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnRhcmdl
dFVSTC5wYXRoXSk7CisKKyAgICB3ZWJWaWV3LmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfRVEoKHNp
emVfdCkwLCBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3BsdWdpblByb2Nlc3NDb3VudF0pOworfQorCitU
RVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENoaWxkUHJvY2Vzc2VzTm90TGF1bmNoZWREYXRh
YmFzZSkKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHNoYXJlZCBwcm9jZXNzIHBvb2wgZXhpc3RzIHNv
IHRoZSBkYXRhIHN0b3JlIG9wZXJhdGlvbnMgd2UncmUgYWJvdXQgdG8gZG8gd29yayB3aXRoIGl0
LgorICAgIFdLUHJvY2Vzc1Bvb2wgKnNoYXJlZFByb2Nlc3NQb29sID0gW1dLUHJvY2Vzc1Bvb2wg
X3NoYXJlZFByb2Nlc3NQb29sXTsKKworICAgIEVYUEVDVF9FUSgoc2l6ZV90KTAsIFtzaGFyZWRQ
cm9jZXNzUG9vbCBfcGx1Z2luUHJvY2Vzc0NvdW50XSk7CisKKyAgICBhdXRvICpkYXRhU3RvcmUg
PSBbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOworCisgICAgTlNVUkwgKnN0
YXRpc3RpY3NEaXJlY3RvcnlVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltAIn4vTGlicmFy
eS9XZWJLaXQvVGVzdFdlYktpdEFQSS9XZWJzaXRlRGF0YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNz
IiBzdHJpbmdCeUV4cGFuZGluZ1RpbGRlSW5QYXRoXSBpc0RpcmVjdG9yeTpZRVNdOworICAgIE5T
VVJMICp0YXJnZXRVUkwgPSBbc3RhdGlzdGljc0RpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1Bh
dGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKKworICAgIE5TVVJMICp0ZXN0UmVzb3Vy
Y2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiRW1wdHlHcmFu
ZGZhdGhlcmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIgd2l0aEV4dGVuc2lvbjpAInBsaXN0IiBz
dWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCiAgICAgW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFVSTDpzdGF0aXN0aWNzRGly
ZWN0b3J5VVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwg
ZXJyb3I6bmlsXTsKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvcHlJdGVt
QXRVUkw6dGVzdFJlc291cmNlVVJMIHRvVVJMOnRhcmdldFVSTCBlcnJvcjpuaWxdOwogCiAgICAg
RVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQ
YXRoOnRhcmdldFVSTC5wYXRoXSk7CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsYmFja0ZsYWc7CiAg
ICAgc3RhdGljIGJvb2wgZG9uZUZsYWc7CisKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0b3JlICosIE5TU3Ry
aW5nICptZXNzYWdlKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0
cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKLSAgICAgICAgZG9uZUZs
YWcgPSB0cnVlOworICAgICAgICAvLyBPbmx5IGlmIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBlbmFi
bGVkIGRvIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIGZpcnN0IG1lc3NhZ2UgaXMgY29ycmVj
dAorICAgICAgICBpZiAoaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZh
dGhlcmluZyJdKTsKKyAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsKICAgICB9XTsKIAogICAg
IC8vIFdlIG5lZWQgYW4gYWN0aXZlIE5ldHdvcmtQcm9jZXNzIHRvIHBlcmZvcm0gUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyBvcGVyYXRpb25zLgpAQCAtMTkwLDcgKzQ0MCwyNiBAQCBURVNUKFJlc291
cmNlTG9hZFN0YXRpc3RpY3MsIENoaWxkUHJvY2Vzc2VzTm90TGF1bmNoZWQpCiAgICAgW2RhdGFT
dG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKICAgICBbd2ViVmll
dyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiYWJvdXQ6YmxhbmsiXV1dOwogCi0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lRmxhZyk7CisgICAgaWYgKCFpc0lUUERhdGFiYXNlRW5hYmxlZCgpKSB7CisgICAgICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2FsbGJhY2tGbGFnKTsKKworICAgICAgICAvLyBJ
ZiB0aGUgZGF0YWJhc2Ugc3RvcmUgaXMgbm90IGVuYWJsZWQsIHdlIG5lZWQgdG8gdXBkYXRlIHRo
ZSBzdG9yZSB0byB1c2UgYSBkYXRhYmFzZSBpbnN0ZWFkIG9mIGEgcGxpc3QgZm9yIHRoaXMgdGVz
dC4KKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgTmV0d29ya1Byb2Nlc3MgdXAgYW5kIHJ1
bm5pbmcgd2l0aCBJVFAgZW5hYmxlZC4gV2Ugbm93IG1ha2UgYW5vdGhlciBjYWxsIGluaXRpYWxp
emluZworICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugc3RvcmUgYW5kIHRlc3RpbmcgZ3JhbmRmYXRo
ZXJpbmcuCisgICAgICAgIGNhbGxiYWNrRmxhZyA9IGZhbHNlOworICAgICAgICBbZGF0YVN0b3Jl
IF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0
YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShb
bWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmci
XSk7CisgICAgICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOworICAgICAgICB9XTsKKworICAg
ICAgICBbZGF0YVN0b3JlIF9zZXRVc2VJVFBEYXRhYmFzZTp0cnVlIGNvbXBsZXRpb25IYW5kbGVy
OiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07CisK
KyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQorCisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOwogCiAgICAgRVhQRUNU
X1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnRh
cmdldFVSTC5wYXRoXSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387115</attachid>
            <date>2020-01-08 11:15:24 -0800</date>
            <delta_ts>2020-01-10 17:59:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205844-20200108111523.patch</filename>
            <type>text/plain</type>
            <size>32062</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk5YzM3MjcwMWZjMzMzMDQz
NDQxOWE2ZGE1YjM2NmIxODdhN2Y3ZTcuLjBiZWQyZDM0YmFkMzQyYTZkNDVhOTI0MTgwYTQ5OGUw
MjJlNzJiMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAtMDEtMDggIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIElUUCBkYXRh
YmFzZSBiYWNrZW5kIGRvZXMgbm90IGdyYW5kZmF0aGVyIHN0YXRpc3RpY3MgY29ycmVjdGx5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU4NDQKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU4MzYwNDUwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBmdW5jdGlvbmFsaXR5IGZv
ciBncmFuZGZhdGhlcmluZyBzdGF0aXN0aWNzIHVwb24KKyAgICAgICAgY3JlYXRpb24gb2YgYSBu
ZXcgSVRQIGRhdGFiYXNlIGZpbGUuIFRoZSBtZW1vcnkgc3RvcmUgcmVsaWVzIG9uCisgICAgICAg
IHRoZSBwcmVzZW5jZSBvZiB0aGUgSVRQIHBsaXN0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIGRh
dGEgc2hvdWxkCisgICAgICAgIGJlIGdyYW5kZmF0aGVyZWQuIFNpbmNlIHRoZSBkYXRhYmFzZSBk
b2VzIG5vdCB1c2UgYSBwbGlzdCwgdGhpcyBwYXRjaAorICAgICAgICBhZGRzIGEgYm9vbGVhbiB2
YXJpYWJsZSB0byB0cmFjayB3aGV0aGVyIHRoZSBkYXRhYmFzZSBmaWxlIHByZXZpb3VzbHkKKyAg
ICAgICAgZXhpc3RlZCBvciBub3QgdG8gaW5kaWNhdGUgd2hlbiB0byBncmFuZGZhdGhlci4KKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKToKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmg6Cisg
ICAgICAgIFRoZSBib29sZWFuIHZhcmlhYmxlIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNE
YXRhYmFzZUZpbGUgaXMgc2V0IAorICAgICAgICB0byB0cnVlIGlmIHRoZSBkYXRhYmFzZSBmaWxl
IGRpZCBub3QgcHJldmlvdXNseSBleGlzdCwgaW5kaWNhdGluZyBJVFAKKyAgICAgICAgaXMgYmVp
bmcgdXNlZCBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kIGRhdGEgc2hvdWxkIGJlIGdyYW5kZmF0aGVy
ZWQuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1dlYlJlc291cmNlTG9h
ZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZTo6cG9wdWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKToKKyAgICAgICAgVGhp
cyBpcyB3aGVyZSB0aGUgZ3JhbmRmYXRoZXJpbmcgaGFwcGVucy4gVGhlIGNhbGwgdG8gbG9nVGVz
dGluZ0V2ZW50CisgICAgICAgIGlzIGZvciBBUEkgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgorCisg
ICAgICAgIChXZWJLaXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCk6CisgICAgICAgIElmIGEgc2NoZWR1bGVDbGVhcklu
TWVtb3J5QW5kUGVyc2lzdGVudCBpcyBjYWxsZWQsIHRoZSBwbGlzdCBpcworICAgICAgICBkZWxl
dGVkLCBhbmQgZGF0YSB3aWxsIGJlIGdyYW5kZmF0aGVyZWQgdXBvbiByZWNyZWF0aW9uLiBUbyBt
aW1pYworICAgICAgICB0aGlzLCB0aGUgSVRQIGRhdGFiYXNlIHN0b3JlIGlzIGNsZWFyZWQgYW5k
IGJlY29tZXMgIm5ldyIgYWdhaW4sIHNvCisgICAgICAgIHRoZSBib29sZWFuIGlzIHNldCB0byB0
cnVlLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAg
ICAgICAoV0tQcmVmZXJlbmNlc1NldElzSVRQRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFdL
UHJlZmVyZW5jZXNHZXRJc0lUUERhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXNSZWYuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJlZmVyZW5jZXMubW06CisgICAgICAgICgtW1dLUHJlZmVyZW5jZXMgX2lzSVRQRGF0YWJh
c2VFbmFibGVkXSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oOgorICAgICAgICBJbiBvcmRlciB0byBwcm9wZXJseSBydW4gdGhlIGdyYW5kZmF0
aGVyaW5nCisgICAgICAgIEFQSSB0ZXN0cywgdGhlICdpc0lUUERhdGFiYXNlRW5hYmxlZCcgYm9v
bGVhbiBuZWVkcyB0byBiZSBleHBvc2VkIGZyb20KKyAgICAgICAgV2ViIFByZWZlcmVuY2VzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW06CisgICAg
ICAgIFRoZSBBUEkgdGVzdHMgcmVseSBvbiB0aGUgSVRQIGRhdGFiYXNlIGZsYWcgYmVpbmcgc2V0
IGNvcnJlY3RseS4gU2luY2UKKyAgICAgICAgYmVpbmcgb24tYnktZGVmYXVsdCwgdGhlIElUUCBk
YXRhYmFzZSBmbGFnIGRvZXMgbm90IHNob3cgdXAgaW4gdGhlCisgICAgICAgIHVzZXIgZGVmYXVs
dHMgbWVudSBpZiBlbmFibGVkLiBUaGlzIHBhdGNoIGZpeGVzIHRoaXMgYnkgZmlyc3QgY2hlY2tp
bmcgCisgICAgICAgIHRvIHNlZSBpZiB0aGUgdmFsdWUgaXMgaW4gdGhlIGRlZmF1bHRzIG1lbnUs
IG90aGVyd2lzZSByZXR1cm5pbmcgdGhlIAorICAgICAgICBkZWZhdWx0IHByZWZlcmVuY2VzIHZh
bHVlLiBUaGlzIGVuc3VyZXMgdGhlIHByZWZlcmVuY2VzIHZhbHVlIG1hdGNoZXMgCisgICAgICAg
IHRoZSBhY3R1YWwgc3RvcmUgYmVpbmcgaW5pdGlhbGl6ZWQuCisKIDIwMjAtMDEtMDYgIFBlciBB
cm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIElzc3VlIG1h
Y2ggbG9va3VwIGV4dGVuc2lvbiB0byBsYXVuY2ggc2VydmljZXMgZGFlbW9uIGZvciBNYWlsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmNw
cAppbmRleCA2NTQxYTRjYTE0OTYwYWRiZjMwZGJkMmQ5ODI0NDgxY2JkZjEwNmJmLi5hNGZjMTQw
YzdjOTExOGNhYWMxOTZiZTE0YzQzZDg0NGQxZjhkYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFi
YXNlU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmll
ci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKQEAgLTMwOSw2ICszMDks
MTEgQEAgUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU6OlJlc291cmNlTG9hZFN0
YXRpc3RpY3NEYXRhYmFzZVN0b3JlKFdlYlJlc28KIAogdm9pZCBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbklUUERhdGFiYXNlKCkKIHsKKyAgICBpZiAoIUZpbGVTeXN0
ZW06OmZpbGVFeGlzdHMobV9zdG9yYWdlRGlyZWN0b3J5UGF0aCkpCisgICAgICAgIG1faXNOZXdS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlID0gdHJ1ZTsKKyAgICBlbHNlCisgICAg
ICAgIG1faXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlID0gZmFsc2U7CisK
ICAgICBpZiAoIW1fZGF0YWJhc2Uub3BlbihtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoKSkgewogICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihOZXR3b3JrLCAiJXAgLSBSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YWJhc2VTdG9yZTo6b3BlbiBmYWlsZWQsIGVycm9yIG1lc3NhZ2U6ICV7cHVibGljfXMs
IGRhdGFiYXNlIHBhdGg6ICV7cHVibGljfXMiLCB0aGlzLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1z
ZygpLCBtX3N0b3JhZ2VEaXJlY3RvcnlQYXRoLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlLmgKaW5kZXggOWIzMTBlYzNjNmYwNWQzMjRjY2U0MzUzMTUyNzA2ZGI0
Y2E2ZjEyZi4uMDVhNDMxNjllYmQ3MjhmMGNmODg3YzZlOWNkYWNmOWE1NGQ2NTFmNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmgKQEAg
LTEzNSw2ICsxMzUsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0NvcnJlY3RTdWJTdGF0aXN0aWNz
Q291bnQoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBjb25zdCBUb3BGcmFtZURvbWFpbiYpOwog
ICAgIHZvaWQgcmVzb3VyY2VUb1N0cmluZyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJikg
Y29uc3Q7CiAgICAgU2Vjb25kcyBnZXRNb3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wKGNvbnN0
IFJlZ2lzdHJhYmxlRG9tYWluJiwgY29uc3QgVG9wRnJhbWVEb21haW4mKSBjb25zdDsKKyAgICBi
b29sIGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSgpIHsgcmV0dXJuIG1f
aXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlOyB9CisgICAgdm9pZCBzZXRJ
c05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUoYm9vbCBpc05ld1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUpIHsgbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZUZpbGUgPSBpc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7
IH0KIAogcHJpdmF0ZToKICAgICB2b2lkIG9wZW5JVFBEYXRhYmFzZSgpOwpAQCAtMjU2LDYgKzI1
OCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9z
dG9yYWdlQWNjZXNzRXhpc3RzU3RhdGVtZW50OwogICAgIG11dGFibGUgV2ViQ29yZTo6U1FMaXRl
U3RhdGVtZW50IG1fZ2V0TW9zdFJlY2VudGx5VXBkYXRlZFRpbWVzdGFtcFN0YXRlbWVudDsKICAg
ICBQQUw6OlNlc3Npb25JRCBtX3Nlc3Npb25JRDsKKyAgICBib29sIG1faXNOZXdSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lm
aWVyL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNw
cAppbmRleCA4MjM5ZDZkOWY1Zjk0MjUwYTgxMTVlMGUzNTE5ODI5ZjlkZGZkMTgwLi40NzUwNTVi
MTc2OTBjZDRlMmZmZjBlZTk1MzMyNjEzMWIxNTc0NTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2Vi
UmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmNwcApAQCAtMjMwLDcgKzIzMCwxOSBAQCB2b2lk
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cG9wdWxhdGVNZW1vcnlTdG9yZUZyb21E
aXNrKENvbXBsZXRpb25IYW5kbAogICAgICAgICAgICAgbV9wZXJzaXN0ZW50U3RvcmFnZS0+cG9w
dWxhdGVNZW1vcnlTdG9yZUZyb21EaXNrKFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
KSBtdXRhYmxlIHsKICAgICAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAgICAgICAgIH0pOwotICAgICAgICBlbHNlCisgICAgICAgIGVs
c2UgaWYgKGlzPFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0
aWNzU3RvcmUpKSB7CisgICAgICAgICAgICBhdXRvJiBkYXRhYmFzZVN0b3JlID0gZG93bmNhc3Q8
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSk7
CisgICAgICAgICAgICBpZiAoZGF0YWJhc2VTdG9yZS5pc05ld1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZUZpbGUoKSkgeworICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3JlLT5n
cmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAgICAgICBwb3N0VGFza1JlcGx5KFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICBkYXRhYmFzZVN0b3JlLnNldElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNl
RmlsZShmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBwb3N0VGFz
a1JlcGx5KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0ZWRUaGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsK
KyAgICAgICAgICAgICAgICAgICAgbG9nVGVzdGluZ0V2ZW50KCJQb3B1bGF0ZWRXaXRob3V0R3Jh
bmRmYXRoZXJpbmciX3MpOworICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBvc3RU
YXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgIH0pOwogfQpAQCAtOTU0
LDkgKzk2NiwxMSBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1
bGVDbGVhckluTWVtb3J5QW5kUGVyc2lzdGVudChTaG91bGRHcgogCiAgICAgICAgIG1fc3RhdGlz
dGljc1N0b3JlLT5jbGVhcihbdGhpcywgcHJvdGVjdGVkVGhpcyA9IHByb3RlY3RlZFRoaXMuY29w
eVJlZigpLCBzaG91bGRHcmFuZGZhdGhlciwgY2FsbGJhY2tBZ2dyZWdhdG9yID0gY2FsbGJhY2tB
Z2dyZWdhdG9yLmNvcHlSZWYoKV0gKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoc2hvdWxk
R3JhbmRmYXRoZXIgPT0gU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzOjpZZXMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUpCisgICAgICAgICAgICAgICAgaWYgKG1f
c3RhdGlzdGljc1N0b3JlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGlzdGljc1N0b3Jl
LT5ncmFuZGZhdGhlckV4aXN0aW5nV2Vic2l0ZURhdGEoW2NhbGxiYWNrQWdncmVnYXRvciA9IFdU
Rk1vdmUoY2FsbGJhY2tBZ2dyZWdhdG9yKV0oKSBtdXRhYmxlIHsgfSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiAoaXM8UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3Rh
dGlzdGljc1N0b3JlKS5zZXRJc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUo
dHJ1ZSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfTE9HKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
U3RvcmU6OnNjaGVkdWxlQ2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQgQWZ0ZXIgYmVpbmcgY2xl
YXJlZCwgbV9zdGF0aXN0aWNzU3RvcmUgaXMgbnVsbCB3aGVuIHRyeWluZyB0byBncmFuZGZhdGhl
ciBkYXRhLiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggYWMzMWE2ZTQxNTExNDNi
NTVmMzZhMjYwNzQ3NWQ0OWY2YTg2YzVkMC4uZjUxYzQwZTRmYmY1ZGJlYTcxZGQ4MjliNmQ2MjM3
ZTJjODQzZTJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
cmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVm
ZXJlbmNlcy5jcHAKQEAgLTExOCw2ICsxMTgsMTYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TG9h
ZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UoV0tQcmVmZXJlbmNlc1IK
ICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bG9hZHNTaXRlSWNvbnNJZ25vcmlu
Z0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UoKTsKIH0KIAordm9pZCBXS1ByZWZlcmVuY2VzU2V0SXNJ
VFBEYXRhYmFzZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBp
c0lUUERhdGFiYXNlRW5hYmxlZCkKK3sKKyAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRJ
c0lUUERhdGFiYXNlRW5hYmxlZChpc0lUUERhdGFiYXNlRW5hYmxlZCk7Cit9CisKK2Jvb2wgV0tQ
cmVmZXJlbmNlc0dldElzSVRQRGF0YWJhc2VFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmlzSVRQRGF0
YWJhc2VFbmFibGVkKCk7Cit9CisKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJBcHBs
aWNhdGlvbkNhY2hlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29s
IG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCkKIHsKICAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQob2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXNSZWYuaAppbmRleCAxMDhkZjc5NGNmNzkwMWMwMzI4NTc5ZTg1
OTYxZmU4OTU4MDUyNGQ5Li5mNzM5Yzc4ZjAwNjg3NzBlNDU1MTNiODJmMGZjY2RlYzM2YzExZGYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2Vz
UmVmLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1Jl
Zi5oCkBAIC03Nyw2ICs3NywxMCBAQCBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TG9h
ZHNJbWFnZXNBdXRvbWF0aWNhbGx5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZQogV0tfRVhQT1JU
IHZvaWQgV0tQcmVmZXJlbmNlc1NldExvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdQ
cmVmZXJlbmNlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wgbG9hZHNTaXRlSWNv
bnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldExvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdQcmVmZXJlbmNlKFdL
UHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMpOwogCisvLyBEZWZhdWx0cyB0byB0cnVlLgorV0tf
RVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldElzSVRQRGF0YWJhc2VFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXMsIGJvb2wgaXNJVFBEYXRhYmFzZUVuYWJsZWQpOworV0tfRVhQ
T1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldElzSVRQRGF0YWJhc2VFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXMpOworCiAvLyBEZWZhdWx0cyB0byB0cnVlLgogV0tfRVhQT1JUIHZv
aWQgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzLCBib29sIG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hl
RW5hYmxlZCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0T2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQppbmRl
eCBhYjczYzU5ZjcxZmZhMzlhMjIwY2UwYjVjOGQxNGZmZDg3NGQ1N2Y2Li42YzUxM2NhNDRjY2Qz
NTJjNzZhOTNmODAxZmRmNmJkZjMzNzQ3ODhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQpAQCAtOTAyLDYgKzkwMiwxMSBAQCAt
ICh2b2lkKV9zZXRSZW1vdGVQbGF5YmFja0VuYWJsZWQ6KEJPT0wpZW5hYmxlZAogICAgIF9wcmVm
ZXJlbmNlcy0+c2V0UmVtb3RlUGxheWJhY2tFbmFibGVkKGVuYWJsZWQpOwogfQogCistIChCT09M
KV9pc0lUUERhdGFiYXNlRW5hYmxlZAoreworICAgIHJldHVybiBfcHJlZmVyZW5jZXMtPmlzSVRQ
RGF0YWJhc2VFbmFibGVkKCk7Cit9CisKICNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKV9zZXRK
YXZhRW5hYmxlZEZvckxvY2FsRmlsZXM6KEJPT0wpZW5hYmxlZAogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaApp
bmRleCBiODQ5ZWNkZjk3NWZmMWRhNTFmM2Y4YzU2MDg4MzQwMGFhMWVmMGRjLi41YjQzOGUyNTdk
M2I1YmQ2ZjNiNzhmZWZlM2NjODIzMDNjNTI1NTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtMTYx
LDYgKzE2MSw3IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0VkaXRhYmxlTGlua0Jl
aGF2aW9yKSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRXZWJBdWRpb0VuYWJs
ZWQ6KSBCT09MIF93ZWJBdWRpb0VuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCks
IGlvcyhXS19JT1NfVEJBKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZDopIEJPT0wgX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcyhXS19JT1NfVEJBKSk7
CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWVF
bmFibGVkOikgQk9PTCBfcmVxdWVzdEFuaW1hdGlvbkZyYW1lRW5hYmxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOworQHByb3BlcnR5IChub25h
dG9taWMsIHJlYWRvbmx5KSBCT09MIF9pc0lUUERhdGFiYXNlRW5hYmxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKFdLX01BQ19UQkEpLCBpb3MoV0tfSU9TX1RCQSkpOwogCiAjaWYgIVRBUkdFVF9P
U19JUEhPTkUKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFdlYkdMRW5hYmxlZDop
IEJPT0wgX3dlYkdMRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCmluZGV4IGM3MGNkYWNiYWNlY2FmYThjY2Q3MDUzNmMxNWI0ZWY3YWY1OTFkMWYuLjc4OWYz
MTk3NTA1OTRkMzFhNTk3M2E5Y2IzODg3OTg2N2Y1YTk4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQpAQCAtNDAxLDcg
KzQwMSwxMSBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3Jr
UHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogICAgIHBhcmFtZXRlcnMuc3RvcmFn
ZUFjY2Vzc0FQSUVuYWJsZWQgPSBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCgpOwogICAgIHBhcmFt
ZXRlcnMuc3VwcHJlc3Nlc0Nvbm5lY3Rpb25UZXJtaW5hdGlvbk9uU3lzdGVtQ2hhbmdlID0gbV9j
b25maWd1cmF0aW9uLT5zdXBwcmVzc2VzQ29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFu
Z2UoKTsKIAotICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVs
dHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIkludGVybmFsRGVidWcl
QCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERhdGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCldXTsKKyAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBb
ZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJu
YWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOworICAgIGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkK
KyAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFibGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5h
YmxlZFZhbHVlLmJvb2xWYWx1ZTsKKyAgICBlbHNlCisgICAgICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJvb2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdlYlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0
cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwog
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGJm
ZjliZGI4NmI3N2M2NDljMmZlODY0MmIzODZiZGExM2M2OWE0YWUuLjkyMzhiNjRkNzU0ZDk2ZDI2
MDI3ZTdlNGZhZmIzODAwMGQ0YWJlNDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wMS0wOCAgS2F0ZSBDaGVu
ZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgSVRQIGRhdGFi
YXNlIGJhY2tlbmQgZG9lcyBub3QgZ3JhbmRmYXRoZXIgc3RhdGlzdGljcyBjb3JyZWN0bHkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTg0NAorICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNTgzNjA0NTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gdGVzdCBib3RoIHRoZSBJVFAgZGF0
YWJhc2UgYW5kIG1lbW9yeSBzdG9yZXMsIHRoaXMgcGF0Y2gKKyAgICAgICAgaGFkIHRvIHJlc3Ry
dWN0dXJlIHRoZSBncmFuZGZhdGhlcmluZyBBUEkgdGVzdHMuCisKKyAgICAgICAgSWYgdGhlIHRl
c3QgaXMgZm9yIHRoZSBkYXRhYmFzZSBiYWNrZW5kIChlbmRzIGluICpEYXRhYmFzZSksIGl0IHdp
bGwKKyAgICAgICAgY2hlY2sgaWYgdGhlIGRlZmF1bHQgc3RvcmUgbWF0Y2hlcy4gSWYgc28sIGl0
IGNvbnRpbnVlcyBvbiB3aXRoIHRoZQorICAgICAgICBub3JtYWwgdGVzdC4gSWYgbm90LCBpdCBo
YXMgdG8gdXNlIGFuIEFQSSBjYWxsIHRvIHJlY29uc3RydWN0IHRoZQorICAgICAgICBuZXcgc3Rv
cmUgYW5kIGVuc3VyZSB0aGUgZ3JhbmRmYXRoZXJpbmcgc3RpbGwgaGFwcGVucy4gVmljZSB2ZXJz
YSBmb3IKKyAgICAgICAgdGhlIG1lbW9yeSBzdG9yZSB0ZXN0cy4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbToKKyAg
ICAgICAgKGlzSVRQRGF0YWJhc2VFbmFibGVkKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDIwLTAx
LTA2ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9T
XSBJc3N1ZSBtYWNoIGxvb2t1cCBleHRlbnNpb24gdG8gbGF1bmNoIHNlcnZpY2VzIGRhZW1vbiBm
b3IgTWFpbApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCmluZGV4IDJkMjc5ZmI1MWExYTU0
Mjc0MzE2NTM4OTdiN2ZkZTk4ODJhZGQwOWIuLmQyNDA0ZjVhNzQzNzg2ZmZjODZjNGUxYjYwMzc0
YzIwYzE5ZTgyNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KQEAgLTY5LDYgKzY5
LDE5IEBAIC0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5pc2hOYXZp
Z2F0aW9uOihXS05hdmlnYXRpb24gKiluYXZpZ2F0CiAKIEBlbmQKIAorYm9vbCBpc0lUUERhdGFi
YXNlRW5hYmxlZCgpCit7CisgICAgTlNVc2VyRGVmYXVsdHMgKmRlZmF1bHRzID0gW05TVXNlckRl
ZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXTsKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIGF1dG8g
ZGVmYXVsdERhdGFiYXNlRW5hYmxlZCA9IFtjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXS5faXNJ
VFBEYXRhYmFzZUVuYWJsZWQ7CisKKyAgICBOU051bWJlciAqZGF0YWJhc2VFbmFibGVkVmFsdWUg
PSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OkAiSW50ZXJuYWxEZWJ1Z0lzSVRQRGF0YWJhc2VFbmFi
bGVkIl07CisgICAgaWYgKGRhdGFiYXNlRW5hYmxlZFZhbHVlKQorICAgICAgICByZXR1cm4gZGF0
YWJhc2VFbmFibGVkVmFsdWUuYm9vbFZhbHVlOworCisgICAgcmV0dXJuIGRlZmF1bHREYXRhYmFz
ZUVuYWJsZWQ7Cit9CisKIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJD
YWxsYmFjaykKIHsKICAgICBhdXRvICpkYXRhU3RvcmUgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIGRl
ZmF1bHREYXRhU3RvcmVdOwpAQCAtODMsNyArOTYsOSBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRp
c3RpY3MsIEdyYW5kZmF0aGVyQ2FsbGJhY2spCiAgICAgc3RhdGljIGJvb2wgZ3JhbmRmYXRoZXJl
ZEZsYWc7CiAKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGlu
Z0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7Ci0g
ICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIkdyYW5kZmF0aGVy
ZWQiXSk7CisgICAgICAgIC8vIE9ubHkgaWYgdGhlIG1lbW9yeSBzdG9yZSBpcyBlbmFibGVkIGRv
IHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIGZpcnN0IG1lc3NhZ2UgaXMgY29ycmVjdC4KKyAg
ICAgICAgaWYgKCFpc0lUUERhdGFiYXNlRW5hYmxlZCgpKQorICAgICAgICAgICAgQVNTRVJUX1RS
VUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiR3JhbmRmYXRoZXJlZCJdKTsKICAgICAgICAg
Z3JhbmRmYXRoZXJlZEZsYWcgPSB0cnVlOwogICAgIH1dOwogCkBAIC05Miw2ICsxMDcsMjUgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxiYWNrKQogICAgIFtk
YXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAgICAgW3dl
YlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwgVVJM
V2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl1dXTsKIAorICAgIGlmIChpc0lUUERhdGFiYXNlRW5h
YmxlZCgpKSB7CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRmYXRoZXJl
ZEZsYWcpOworCisgICAgICAgIC8vIElmIHRoZSBtZW1vcnkgc3RvcmUgaXMgbm90IGVuYWJsZWQs
IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdG9yZSB0byB1c2UgYSBwbGlzdCBmb3IgdGhpcyB0ZXN0
LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBOZXR3b3JrUHJvY2VzcyB1cCBhbmQgcnVu
bmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBub3cgbWFrZSBhbm90aGVyIGNhbGwgaW5pdGlhbGl6
aW5nCisgICAgICAgIC8vIHRoZSBtZW1vcnkgc3RvcmUgYW5kIHRlc3RpbmcgZ3JhbmRmYXRoZXJp
bmcuCisgICAgICAgIGdyYW5kZmF0aGVyZWRGbGFnID0gZmFsc2U7CisgICAgICAgIFtkYXRhU3Rv
cmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVE
YXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVF
KFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIkdyYW5kZmF0aGVyZWQiXSk7CisgICAgICAgICAg
ICBncmFuZGZhdGhlcmVkRmxhZyA9IHRydWU7CisgICAgICAgIH1dOworCisgICAgICAgIFtkYXRh
U3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOmZhbHNlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQp
IHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAg
VGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQorCiAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZncmFuZGZhdGhlcmVkRmxhZyk7CiAKICAgICAvLyBTcGluIHRo
ZSBydW5sb29wIHVudGlsIHRoZSByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MgZmlsZSBoYXMgd3Jp
dHRlbiB0byBkaXNrLgpAQCAtMTAzLDYgKzEzNyw3IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlz
dGljcywgR3JhbmRmYXRoZXJDYWxsYmFjaykKICAgICB9CiAKICAgICBncmFuZGZhdGhlcmVkRmxh
ZyA9IGZhbHNlOworICAgIGRvbmVGbGFnID0gZmFsc2U7CiAgICAgW2RhdGFTdG9yZSByZW1vdmVE
YXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIF9hbGxXZWJzaXRlRGF0YVR5cGVzSW5jbHVk
aW5nUHJpdmF0ZV0gIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlv
bkhhbmRsZXI6XiB7CiAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKICAgICB9XTsKQEAgLTEzNCw2
ICsxNjksODMgQEAgVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxi
YWNrKQogICAgIH0KIH0KIAorVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhl
ckNhbGxiYWNrRGF0YWJhc2UpCit7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1dLV2Vic2l0ZURh
dGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXTsKKworICAgIE5TVVJMICpzdGF0aXN0aWNzRGlyZWN0
b3J5VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbQCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RX
ZWJLaXRBUEkvV2Vic2l0ZURhdGEvUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIgc3RyaW5nQnlFeHBh
bmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBOU1VSTCAqZmlsZVVSTCA9
IFtzdGF0aXN0aWNzRGlyZWN0b3J5VVJMIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9i
c2VydmF0aW9ucy5kYiJdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVt
b3ZlSXRlbUF0VVJMOmZpbGVVUkwgZXJyb3I6bmlsXTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMIGVycm9y
Om5pbF07CisgICAgRVhQRUNUX0ZBTFNFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMLnBhdGhdKTsKKworICAgIHN0
YXRpYyBib29sIGdyYW5kZmF0aGVyZWRGbGFnOworICAgIHN0YXRpYyBib29sIGRvbmVGbGFnOwor
CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFj
azpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgeworICAgICAgICAv
LyBPbmx5IGlmIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBlbmFibGVkIGRvIHdlIG5lZWQgdG8gY2hl
Y2sgdGhhdCB0aGlzIGZpcnN0IG1lc3NhZ2UgaXMgY29ycmVjdC4KKyAgICAgICAgaWYgKGlzSVRQ
RGF0YWJhc2VFbmFibGVkKCkpCisgICAgICAgICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0Vx
dWFsVG9TdHJpbmc6QCJHcmFuZGZhdGhlcmVkIl0pOworICAgICAgICBncmFuZGZhdGhlcmVkRmxh
ZyA9IHRydWU7CisgICAgfV07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7Cisg
ICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKKyAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VS
TCBVUkxXaXRoU3RyaW5nOkAiYWJvdXQ6YmxhbmsiXV1dOworCisgICAgaWYgKCFpc0lUUERhdGFi
YXNlRW5hYmxlZCgpKSB7CisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRm
YXRoZXJlZEZsYWcpOworCisgICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBub3Qg
ZW5hYmxlZCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVzZSBhIGRhdGFiYXNlIGlu
c3RlYWQgb2YgYSBwbGlzdCBmb3IgdGhpcyB0ZXN0LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhh
dmUgYSBOZXR3b3JrUHJvY2VzcyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBu
b3cgbWFrZSBhbm90aGVyIGNhbGwgaW5pdGlhbGl6aW5nCisgICAgICAgIC8vIHRoZSBkYXRhYmFz
ZSBzdG9yZSBhbmQgdGVzdGluZyBncmFuZGZhdGhlcmluZy4KKyAgICAgICAgZ3JhbmRmYXRoZXJl
ZEZsYWcgPSBmYWxzZTsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlz
dGljc1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVz
c2FnZSkgeworICAgICAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5n
OkAiR3JhbmRmYXRoZXJlZCJdKTsKKyAgICAgICAgICAgIGdyYW5kZmF0aGVyZWRGbGFnID0gdHJ1
ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0VXNlSVRQRGF0YWJhc2U6
dHJ1ZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBkb25lRmxhZyA9
IHRydWU7CisgICAgICAgIH1dOworCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
ZG9uZUZsYWcpOworICAgIH0KKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZ3JhbmRm
YXRoZXJlZEZsYWcpOworCisgICAgLy8gU3BpbiB0aGUgcnVubG9vcCB1bnRpbCB0aGUgcmVzb3Vy
Y2UgbG9hZCBzdGF0aXN0aWNzIGZpbGUgaGFzIHdyaXR0ZW4gdG8gZGlzay4KKyAgICAvLyBJZiB0
aGUgdGVzdCBlbnRlcnMgYSBzcGluIGxvb3AgaGVyZSwgaXQgaGFzIGZhaWxlZC4KKyAgICB3aGls
ZSAodHJ1ZSkgeworICAgICAgICBpZiAoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBm
aWxlRXhpc3RzQXRQYXRoOmZpbGVVUkwucGF0aF0pCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMSk7CisgICAgfQorCisgICAgZ3Jh
bmRmYXRoZXJlZEZsYWcgPSBmYWxzZTsKKyAgICBkb25lRmxhZyA9IGZhbHNlOworICAgIFtkYXRh
U3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W1dLV2Vic2l0ZURhdGFTdG9yZSBfYWxsV2Vic2l0ZURh
dGFUeXBlc0luY2x1ZGluZ1ByaXZhdGVdICBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBh
c3RdIGNvbXBsZXRpb25IYW5kbGVyOl4geworICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAg
fV07CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKKyAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgxMCk7CisKKyAgICAvLyBUaGUgd2Vic2l0ZSBk
YXRhIHN0b3JlIHJlbW92ZSBzaG91bGQgaGF2ZSBjb21wbGV0ZWQsIGJ1dCBzaW5jZSB3ZSByZW1v
dmVkIGFsbCBvZiB0aGUgZGF0YSB0eXBlcyB0aGF0IGFyZSBtb25pdG9yZWQgYnkgcmVzb3VyY2Ug
bG9hZCBzdGF0aXN0aWNzLAorICAgIC8vIG5vIGdyYW5kZmF0aGVyaW5nIGNhbGwgc2hvdWxkIGhh
dmUgYmVlbiBtYWRlLiBOb3RlIHRoYXQgdGhlIGRhdGFiYXNlIGZpbGUgd2lsbCBub3QgYmUgZGVs
ZXRlZCBsaWtlIGluIHRoZSBwZXJzaXN0ZW50IHN0b3JhZ2UgY2FzZSwgb25seSBjbGVhcmVkLgor
ICAgIEVYUEVDVF9GQUxTRShncmFuZGZhdGhlcmVkRmxhZyk7CisKKyAgICBkb25lRmxhZyA9IGZh
bHNlOworICAgIFtkYXRhU3RvcmUgcmVtb3ZlRGF0YU9mVHlwZXM6W05TU2V0IHNldFdpdGhPYmpl
Y3RzOldLV2Vic2l0ZURhdGFUeXBlQ29va2llcywgX1dLV2Vic2l0ZURhdGFUeXBlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgbmlsXSBtb2RpZmllZFNpbmNlOltOU0RhdGUgZGlzdGFudFBhc3RdIGNv
bXBsZXRpb25IYW5kbGVyOl4geworICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAgfV07CisK
KyAgICAvLyBTaW5jZSB3ZSBkaWQgbm90IHJlbW92ZSBldmVyeSBkYXRhIHR5cGUgY292ZXJlZCBi
eSByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MsIHdlIGRvIGV4cGVjdCB0aGF0IGdyYW5kZmF0aGVy
aW5nIHRvb2sgcGxhY2UgYWdhaW4uCisgICAgLy8gSWYgdGhlIHRlc3QgaGFuZ3Mgd2FpdGluZyBv
biBlaXRoZXIgb2YgdGhlc2UgY29uZGl0aW9ucywgaXQgaGFzIGZhaWxlZC4KKyAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsKKyAgICBUZXN0V2ViS2l0QVBJ
OjpVdGlsOjpydW4oJmRvbmVGbGFnKTsKK30KKwogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
LCBTaG91bGROb3RHcmFuZGZhdGhlck9uU3RhcnR1cCkKIHsKICAgICBhdXRvICpkYXRhU3RvcmUg
PSBbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOwpAQCAtMTQ4LDggKzI2MCw2
MiBAQCBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdyYW5kZmF0aGVyT25T
dGFydHVwKQogICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0g
ZmlsZUV4aXN0c0F0UGF0aDp0YXJnZXRVUkwucGF0aF0pOwogCiAgICAgc3RhdGljIGJvb2wgY2Fs
bGJhY2tGbGFnOworICAgIHN0YXRpYyBib29sIGRvbmVGbGFnOworCisgICAgW2RhdGFTdG9yZSBf
c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFT
dG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgeworICAgICAgICAvLyBPbmx5IGlmIHRoZSBtZW1v
cnkgc3RvcmUgaXMgZW5hYmxlZCBkbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhpcyBmaXJzdCBt
ZXNzYWdlIGlzIGNvcnJlY3QuCisgICAgICAgIGlmICghaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkK
KyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVs
YXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKKyAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1
ZTsKKyAgICB9XTsKKworICAgIC8vIFdlIG5lZWQgYW4gYWN0aXZlIE5ldHdvcmtQcm9jZXNzIHRv
IHBlcmZvcm0gUmVzb3VyY2VMb2FkU3RhdGlzdGljcyBvcGVyYXRpb25zLgorICAgIGF1dG8gd2Vi
VmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVj
dCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZDpZRVNdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVl
c3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdXV07
CisKKyAgICBpZiAoaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkgeworICAgICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNrRmxhZyk7CisKKyAgICAgICAgLy8gSWYgdGhlIG1lbW9y
eSBzdG9yZSBpcyBub3QgZW5hYmxlZCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVz
ZSBhIHBsaXN0IGZvciB0aGlzIHRlc3QuCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5l
dHdvcmtQcm9jZXNzIHVwIGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtl
IGFub3RoZXIgY2FsbCBpbml0aWFsaXppbmcKKyAgICAgICAgLy8gdGhlIG1lbW9yeSBzdG9yZSBh
bmQgdGVzdGluZyBncmFuZGZhdGhlcmluZy4KKyAgICAgICAgY2FsbGJhY2tGbGFnID0gZmFsc2U7
CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2Fs
bGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdp
dGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKKyAgICAgICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7
CisgICAgICAgIH1dOworCisgICAgICAgIFtkYXRhU3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOmZh
bHNlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0g
dHJ1ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lRmxhZyk7CisgICAgfQorCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFj
a0ZsYWcpOworfQorCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdyYW5k
ZmF0aGVyT25TdGFydHVwRGF0YWJhc2UpCit7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1dLV2Vi
c2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXTsKKworICAgIE5TVVJMICpzdGF0aXN0aWNz
RGlyZWN0b3J5VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbQCJ+L0xpYnJhcnkvV2ViS2l0
L1Rlc3RXZWJLaXRBUEkvV2Vic2l0ZURhdGEvUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIgc3RyaW5n
QnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBOU1VSTCAqdGFy
Z2V0VVJMID0gW3N0YXRpc3RpY3NEaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9u
ZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CisgICAgTlNVUkwgKnRlc3RSZXNvdXJjZVVSTCA9IFtb
TlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJFbXB0eUdyYW5kZmF0aGVyZWRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzIiB3aXRoRXh0ZW5zaW9uOkAicGxpc3QiIHN1YmRpcmVjdG9y
eTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVm
YXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN0YXRpc3RpY3NEaXJlY3RvcnlVUkwg
d2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxd
OworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDp0ZXN0
UmVzb3VyY2VVUkwgdG9VUkw6dGFyZ2V0VVJMIGVycm9yOm5pbF07CisKKyAgICBFWFBFQ1RfVFJV
RShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6dGFyZ2V0
VVJMLnBhdGhdKTsKKworICAgIHN0YXRpYyBib29sIGNhbGxiYWNrRmxhZzsKKyAgICBzdGF0aWMg
Ym9vbCBkb25lRmxhZzsKKwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3Nh
Z2UpIHsKLSAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9w
dWxhdGVkV2l0aG91dEdyYW5kZmF0aGVyaW5nIl0pOworICAgICAgICAvLyBPbmx5IGlmIHRoZSBk
YXRhYmFzZSBzdG9yZSBpcyBlbmFibGVkIGRvIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIGZp
cnN0IG1lc3NhZ2UgaXMgY29ycmVjdC4KKyAgICAgICAgaWYgKGlzSVRQRGF0YWJhc2VFbmFibGVk
KCkpCisgICAgICAgICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQ
b3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmciXSk7CiAgICAgICAgIGNhbGxiYWNrRmxhZyA9
IHRydWU7CiAgICAgfV07CiAKQEAgLTE1OCw2ICszMjQsMjUgQEAgVEVTVChSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCBTaG91bGROb3RHcmFuZGZhdGhlck9uU3RhcnR1cCkKICAgICBbZGF0YVN0b3Jl
IF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOwogICAgIFt3ZWJWaWV3IGxv
YWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJhYm91dDpibGFuayJdXV07CiAKKyAgICBpZiAoIWlzSVRQRGF0YWJhc2VFbmFibGVkKCkp
IHsKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOworCisg
ICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBub3QgZW5hYmxlZCwgd2UgbmVlZCB0
byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVzZSBhIGRhdGFiYXNlIGluc3RlYWQgb2YgYSBwbGlzdCBm
b3IgdGhpcyB0ZXN0LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBOZXR3b3JrUHJvY2Vz
cyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBub3cgbWFrZSBhbm90aGVyIGNh
bGwgaW5pdGlhbGl6aW5nCisgICAgICAgIC8vIHRoZSBkYXRhYmFzZSBzdG9yZSBhbmQgdGVzdGlu
ZyBncmFuZGZhdGhlcmluZy4KKyAgICAgICAgY2FsbGJhY2tGbGFnID0gZmFsc2U7CisgICAgICAg
IFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihX
S1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIEFT
U0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFu
ZGZhdGhlcmluZyJdKTsKKyAgICAgICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7CisgICAgICAg
IH1dOworCisgICAgICAgIFtkYXRhU3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOnRydWUgY29tcGxl
dGlvbkhhbmRsZXI6IF4odm9pZCkgeworICAgICAgICAgICAgZG9uZUZsYWcgPSB0cnVlOworICAg
ICAgICB9XTsKKworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmVGbGFnKTsK
KyAgICB9CisKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNrRmxhZyk7CiB9
CiAKQEAgLTE3NCwxNSArMzU5LDgwIEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgQ2hp
bGRQcm9jZXNzZXNOb3RMYXVuY2hlZCkKICAgICBOU1VSTCAqdGFyZ2V0VVJMID0gW3N0YXRpc3Rp
Y3NEaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiZnVsbF9icm93c2lu
Z19zZXNzaW9uX3Jlc291cmNlTG9nLnBsaXN0Il07CiAgICAgTlNVUkwgKnRlc3RSZXNvdXJjZVVS
TCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJFbXB0eUdyYW5kZmF0
aGVyZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIiB3aXRoRXh0ZW5zaW9uOkAicGxpc3QiIHN1YmRp
cmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CiAKKyAgICBbW05TRmlsZU1hbmFn
ZXIgZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN0YXRpc3RpY3NEaXJlY3Rv
cnlVUkwgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJv
cjpuaWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVS
TDp0ZXN0UmVzb3VyY2VVUkwgdG9VUkw6dGFyZ2V0VVJMIGVycm9yOm5pbF07CisgICAgCisgICAg
RVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQ
YXRoOnRhcmdldFVSTC5wYXRoXSk7CisKKyAgICBzdGF0aWMgYm9vbCBjYWxsYmFja0ZsYWc7Cisg
ICAgc3RhdGljIGJvb2wgZG9uZUZsYWc7CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmlu
ZyAqbWVzc2FnZSkgeworICAgICAgICAvLyBPbmx5IGlmIHRoZSBtZW1vcnkgc3RvcmUgaXMgZW5h
YmxlZCBkbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhpcyBmaXJzdCBtZXNzYWdlIGlzIGNvcnJl
Y3QuCisgICAgICAgIGlmICghaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIEVY
UEVDVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFu
ZGZhdGhlcmluZyJdKTsKKyAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsKKyAgICB9XTsKKwor
ICAgIC8vIFdlIG5lZWQgYW4gYWN0aXZlIE5ldHdvcmtQcm9jZXNzIHRvIHBlcmZvcm0gUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljcyBvcGVyYXRpb25zLgorICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMo
W1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYw
MCldKTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZ
RVNdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhV
Ukw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdXV07CisKKyAgICBpZiAoaXNJ
VFBEYXRhYmFzZUVuYWJsZWQoKSkgeworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmNhbGxiYWNrRmxhZyk7CisKKyAgICAgICAgLy8gSWYgdGhlIG1lbW9yeSBzdG9yZSBpcyBub3Qg
ZW5hYmxlZCwgd2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0b3JlIHRvIHVzZSBhIHBsaXN0IGZvciB0
aGlzIHRlc3QuCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNzIHVw
IGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2FsbCBp
bml0aWFsaXppbmcKKyAgICAgICAgLy8gdGhlIG1lbW9yeSBzdG9yZSBhbmQgdGVzdGluZyBncmFu
ZGZhdGhlcmluZy4KKyAgICAgICAgY2FsbGJhY2tGbGFnID0gZmFsc2U7CisgICAgICAgIFtkYXRh
U3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNp
dGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVF9U
UlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhl
cmluZyJdKTsKKyAgICAgICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7CisgICAgICAgIH1dOwor
CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOmZhbHNlIGNvbXBsZXRpb25I
YW5kbGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAg
fV07CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAg
fQorCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOworCisgICAg
RVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQ
YXRoOnRhcmdldFVSTC5wYXRoXSk7CisKKyAgICB3ZWJWaWV3LmNsZWFyKCk7CisKKyAgICBFWFBF
Q1RfRVEoKHNpemVfdCkwLCBbc2hhcmVkUHJvY2Vzc1Bvb2wgX3BsdWdpblByb2Nlc3NDb3VudF0p
OworfQorCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIENoaWxkUHJvY2Vzc2VzTm90TGF1
bmNoZWREYXRhYmFzZSkKK3sKKyAgICAvLyBFbnN1cmUgdGhlIHNoYXJlZCBwcm9jZXNzIHBvb2wg
ZXhpc3RzIHNvIHRoZSBkYXRhIHN0b3JlIG9wZXJhdGlvbnMgd2UncmUgYWJvdXQgdG8gZG8gd29y
ayB3aXRoIGl0LgorICAgIFdLUHJvY2Vzc1Bvb2wgKnNoYXJlZFByb2Nlc3NQb29sID0gW1dLUHJv
Y2Vzc1Bvb2wgX3NoYXJlZFByb2Nlc3NQb29sXTsKKworICAgIEVYUEVDVF9FUSgoc2l6ZV90KTAs
IFtzaGFyZWRQcm9jZXNzUG9vbCBfcGx1Z2luUHJvY2Vzc0NvdW50XSk7CisKKyAgICBhdXRvICpk
YXRhU3RvcmUgPSBbV0tXZWJzaXRlRGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOworCisgICAg
TlNVUkwgKnN0YXRpc3RpY3NEaXJlY3RvcnlVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltA
In4vTGlicmFyeS9XZWJLaXQvVGVzdFdlYktpdEFQSS9XZWJzaXRlRGF0YS9SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzIiBzdHJpbmdCeUV4cGFuZGluZ1RpbGRlSW5QYXRoXSBpc0RpcmVjdG9yeTpZRVNd
OworICAgIE5TVVJMICp0YXJnZXRVUkwgPSBbc3RhdGlzdGljc0RpcmVjdG9yeVVSTCBVUkxCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6QCJvYnNlcnZhdGlvbnMuZGIiXTsKKworICAgIE5TVVJMICp0
ZXN0UmVzb3VyY2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
RW1wdHlHcmFuZGZhdGhlcmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIgd2l0aEV4dGVuc2lvbjpA
InBsaXN0IiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCiAgICAg
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFVSTDpzdGF0
aXN0aWNzRGlyZWN0b3J5VVJMIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmli
dXRlczpuaWwgZXJyb3I6bmlsXTsKICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGNvcHlJdGVtQXRVUkw6dGVzdFJlc291cmNlVVJMIHRvVVJMOnRhcmdldFVSTCBlcnJvcjpuaWxd
OwogCiAgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxl
RXhpc3RzQXRQYXRoOnRhcmdldFVSTC5wYXRoXSk7CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsYmFj
a0ZsYWc7CiAgICAgc3RhdGljIGJvb2wgZG9uZUZsYWc7CisKICAgICBbZGF0YVN0b3JlIF9zZXRS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0b3Jl
ICosIE5TU3RyaW5nICptZXNzYWdlKSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFttZXNzYWdlIGlz
RXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKLSAgICAg
ICAgZG9uZUZsYWcgPSB0cnVlOworICAgICAgICAvLyBPbmx5IGlmIHRoZSBkYXRhYmFzZSBzdG9y
ZSBpcyBlbmFibGVkIGRvIHdlIG5lZWQgdG8gY2hlY2sgdGhhdCB0aGlzIGZpcnN0IG1lc3NhZ2Ug
aXMgY29ycmVjdC4KKyAgICAgICAgaWYgKGlzSVRQRGF0YWJhc2VFbmFibGVkKCkpCisgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRo
b3V0R3JhbmRmYXRoZXJpbmciXSk7CisgICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7CiAgICAg
fV07CiAKICAgICAvLyBXZSBuZWVkIGFuIGFjdGl2ZSBOZXR3b3JrUHJvY2VzcyB0byBwZXJmb3Jt
IFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgb3BlcmF0aW9ucy4KQEAgLTE5MCw3ICs0NDAsMjYgQEAg
VEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBDaGlsZFByb2Nlc3Nlc05vdExhdW5jaGVkKQog
ICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAg
ICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNV
UkwgVVJMV2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl1dXTsKIAotICAgIFRlc3RXZWJLaXRBUEk6
OlV0aWw6OnJ1bigmZG9uZUZsYWcpOworICAgIGlmICghaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkg
eworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNrRmxhZyk7CisKKyAg
ICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHN0b3JlIGlzIG5vdCBlbmFibGVkLCB3ZSBuZWVkIHRv
IHVwZGF0ZSB0aGUgc3RvcmUgdG8gdXNlIGEgZGF0YWJhc2UgaW5zdGVhZCBvZiBhIHBsaXN0IGZv
ciB0aGlzIHRlc3QuCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNz
IHVwIGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2Fs
bCBpbml0aWFsaXppbmcKKyAgICAgICAgLy8gdGhlIGRhdGFiYXNlIHN0b3JlIGFuZCB0ZXN0aW5n
IGdyYW5kZmF0aGVyaW5nLgorICAgICAgICBjYWxsYmFja0ZsYWcgPSBmYWxzZTsKKyAgICAgICAg
W2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpeKFdL
V2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgeworICAgICAgICAgICAgQVNT
RVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9wdWxhdGVkV2l0aG91dEdyYW5k
ZmF0aGVyaW5nIl0pOworICAgICAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsKKyAgICAgICAg
fV07CisKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0VXNlSVRQRGF0YWJhc2U6dHJ1ZSBjb21wbGV0
aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBkb25lRmxhZyA9IHRydWU7CisgICAg
ICAgIH1dOworCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOwor
ICAgIH0KKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2FsbGJhY2tGbGFnKTsKIAog
ICAgIEVYUEVDVF9UUlVFKFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0
c0F0UGF0aDp0YXJnZXRVUkwucGF0aF0pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387409</attachid>
            <date>2020-01-10 17:59:08 -0800</date>
            <delta_ts>2020-01-11 06:58:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205844-20200110175907.patch</filename>
            <type>text/plain</type>
            <size>31995</size>
            <attacher name="Kate Cheney">katherine_cheney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MzgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGI0ZGM1MDZjNDRkYjQzM2Jl
ZDI1YzczNTkwMDA3M2ZhMzEzZmU3MGQuLmQzZDZjYTJmYjM0MTMxMTRlM2ZhNmRmNzdmZGIxZWIy
ZTA5NzA3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAtMDEtMTAgIEthdGUgQ2hl
bmV5ICA8a2F0aGVyaW5lX2NoZW5leUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGNvcnJlY3Qg
Z3JhbmRmYXRoZXJpbmcgZnVuY3Rpb25hbGl0eSB0byB0aGUgSVRQIGRhdGFiYXNlIGJhY2tlbmQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTg0NAor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTgzNjA0NTA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Sm9obiBXaWxhbmRlci4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgZnVuY3Rpb25hbGl0eSBm
b3IgZ3JhbmRmYXRoZXJpbmcgc3RhdGlzdGljcyB1cG9uCisgICAgICAgIGNyZWF0aW9uIG9mIGEg
bmV3IElUUCBkYXRhYmFzZSBmaWxlLiBUaGUgbWVtb3J5IHN0b3JlIHJlbGllcyBvbgorICAgICAg
ICB0aGUgcHJlc2VuY2Ugb2YgdGhlIElUUCBwbGlzdCB0byBpbmRpY2F0ZSB3aGV0aGVyIHRoZSBk
YXRhIHNob3VsZAorICAgICAgICBiZSBncmFuZGZhdGhlcmVkLiBTaW5jZSB0aGUgZGF0YWJhc2Ug
ZG9lcyBub3QgdXNlIGEgcGxpc3QsIHRoaXMgcGF0Y2gKKyAgICAgICAgYWRkcyBhIGJvb2xlYW4g
dmFyaWFibGUgdG8gdHJhY2sgd2hldGhlciB0aGUgZGF0YWJhc2UgZmlsZSBwcmV2aW91c2x5Cisg
ICAgICAgIGV4aXN0ZWQgb3Igbm90IHRvIGluZGljYXRlIHdoZW4gdG8gZ3JhbmRmYXRoZXIuCisK
KyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RhdGFiYXNlU3RvcmU6Om9wZW5JVFBEYXRhYmFzZSk6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5oOgor
ICAgICAgICBUaGUgYm9vbGVhbiB2YXJpYWJsZSBtX2lzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGlj
RGF0YWJhc2VGaWxlIGlzIHNldCAKKyAgICAgICAgdG8gdHJ1ZSBpZiB0aGUgZGF0YWJhc2UgZmls
ZSBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QsIGluZGljYXRpbmcgSVRQCisgICAgICAgIGlzIGJl
aW5nIHVzZWQgZm9yIHRoZSBmaXJzdCB0aW1lIGFuZCBkYXRhIHNob3VsZCBiZSBncmFuZGZhdGhl
cmVkLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OnBvcHVsYXRlTWVtb3J5U3RvcmVGcm9tRGlzayk6CisgICAgICAgIFRo
aXMgaXMgd2hlcmUgdGhlIGdyYW5kZmF0aGVyaW5nIGhhcHBlbnMuIFRoZSBjYWxsIHRvIGxvZ1Rl
c3RpbmdFdmVudAorICAgICAgICBpcyBmb3IgQVBJIHRlc3RpbmcgcHVycG9zZXMgb25seS4KKwor
ICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OnNjaGVkdWxl
Q2xlYXJJbk1lbW9yeUFuZFBlcnNpc3RlbnQpOgorICAgICAgICBJZiBhIHNjaGVkdWxlQ2xlYXJJ
bk1lbW9yeUFuZFBlcnNpc3RlbnQgaXMgY2FsbGVkLCB0aGUgcGxpc3QgaXMKKyAgICAgICAgZGVs
ZXRlZCwgYW5kIGRhdGEgd2lsbCBiZSBncmFuZGZhdGhlcmVkIHVwb24gcmVjcmVhdGlvbi4gVG8g
bWltaWMKKyAgICAgICAgdGhpcywgdGhlIElUUCBkYXRhYmFzZSBzdG9yZSBpcyBjbGVhcmVkIGFu
ZCBiZWNvbWVzICJuZXciIGFnYWluLCBzbworICAgICAgICB0aGUgYm9vbGVhbiBpcyBzZXQgdG8g
dHJ1ZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcDoKKyAg
ICAgICAgKFdLUHJlZmVyZW5jZXNTZXRJc0lUUERhdGFiYXNlRW5hYmxlZCk6CisgICAgICAgIChX
S1ByZWZlcmVuY2VzR2V0SXNJVFBEYXRhYmFzZUVuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1ByZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9pc0lUUERhdGFi
YXNlRW5hYmxlZF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaDoKKyAgICAgICAgSW4gb3JkZXIgdG8gcHJvcGVybHkgcnVuIHRoZSBncmFuZGZh
dGhlcmluZworICAgICAgICBBUEkgdGVzdHMsIHRoZSAnaXNJVFBEYXRhYmFzZUVuYWJsZWQnIGJv
b2xlYW4gbmVlZHMgdG8gYmUgZXhwb3NlZCBmcm9tCisgICAgICAgIFdlYiBQcmVmZXJlbmNlcy4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAg
ICAgICBUaGUgQVBJIHRlc3RzIHJlbHkgb24gdGhlIElUUCBkYXRhYmFzZSBmbGFnIGJlaW5nIHNl
dCBjb3JyZWN0bHkuIFNpbmNlCisgICAgICAgIGJlaW5nIG9uLWJ5LWRlZmF1bHQsIHRoZSBJVFAg
ZGF0YWJhc2UgZmxhZyBkb2VzIG5vdCBzaG93IHVwIGluIHRoZQorICAgICAgICB1c2VyIGRlZmF1
bHRzIG1lbnUgaWYgZW5hYmxlZC4gVGhpcyBwYXRjaCBmaXhlcyB0aGlzIGJ5IGZpcnN0IGNoZWNr
aW5nIAorICAgICAgICB0byBzZWUgaWYgdGhlIHZhbHVlIGlzIGluIHRoZSBkZWZhdWx0cyBtZW51
LCBvdGhlcndpc2UgcmV0dXJuaW5nIHRoZSAKKyAgICAgICAgZGVmYXVsdCBwcmVmZXJlbmNlcyB2
YWx1ZS4gVGhpcyBlbnN1cmVzIHRoZSBwcmVmZXJlbmNlcyB2YWx1ZSBtYXRjaGVzIAorICAgICAg
ICB0aGUgYWN0dWFsIHN0b3JlIGJlaW5nIGluaXRpYWxpemVkLgorCiAyMDIwLTAxLTEwICBKb25h
dGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBQeXRob24zOiBTdXBw
b3J0IFNvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJh
c2VTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuY3BwCmluZGV4IGI1YWIyN2YyYjQ4M2I1
MjZhYWE0YjRiMGIyMzkxN2ZlNDYzMDJkMmYuLjhkOTMwMzgyZDdmYzU3YjA2M2I1YzJiZDgwMWRh
NmExMjI2Njg1NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEYXRhYmFzZVN0b3JlLmNwcApAQCAtMzA5LDYgKzMwOSwxMSBAQCBSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZTo6UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUo
V2ViUmVzbwogCiB2b2lkIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVu
SVRQRGF0YWJhc2UoKQogeworICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhtX3N0b3Jh
Z2VEaXJlY3RvcnlQYXRoKSkKKyAgICAgICAgbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhYmFzZUZpbGUgPSB0cnVlOworICAgIGVsc2UKKyAgICAgICAgbV9pc05ld1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGUgPSBmYWxzZTsKKwogICAgIGlmICghbV9kYXRhYmFzZS5v
cGVuKG1fc3RvcmFnZURpcmVjdG9yeVBhdGgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KE5ldHdvcmssICIlcCAtIFJlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlOjpvcGVu
IGZhaWxlZCwgZXJyb3IgbWVzc2FnZTogJXtwdWJsaWN9cywgZGF0YWJhc2UgcGF0aDogJXtwdWJs
aWN9cyIsIHRoaXMsIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCksIG1fc3RvcmFnZURpcmVjdG9y
eVBhdGgudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyL1Jlc291cmNl
TG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaAppbmRl
eCA5MDgzMWQ4OWY3YWJlNDkyZDAxZjYwZDUzM2I2YjZkOGM0NWNhMTJkLi44NTczMDk4ODFlNGI0
M2E5YjkyYzA3YjBhNmU0MjM4ZmU1NzQ4M2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3Rv
cmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmUuaApAQCAtMTM1LDYgKzEzNSw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzQ29ycmVjdFN1YlN0YXRpc3RpY3NDb3VudChjb25zdCBSZWdpc3RyYWJs
ZURvbWFpbiYsIGNvbnN0IFRvcEZyYW1lRG9tYWluJik7CiAgICAgdm9pZCByZXNvdXJjZVRvU3Ry
aW5nKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICBTZWNvbmRzIGdl
dE1vc3RSZWNlbnRseVVwZGF0ZWRUaW1lc3RhbXAoY29uc3QgUmVnaXN0cmFibGVEb21haW4mLCBj
b25zdCBUb3BGcmFtZURvbWFpbiYpIGNvbnN0OworICAgIGJvb2wgaXNOZXdSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRGF0YWJhc2VGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9pc05ld1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NEYXRhYmFzZUZpbGU7IH0KKyAgICB2b2lkIHNldElzTmV3UmVzb3VyY2VMb2Fk
U3RhdGlzdGljc0RhdGFiYXNlRmlsZShib29sIGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rh
dGFiYXNlRmlsZSkgeyBtX2lzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSA9
IGlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZTsgfQogCiBwcml2YXRlOgog
ICAgIHZvaWQgb3BlbklUUERhdGFiYXNlKCk7CkBAIC0yNTYsNiArMjU4LDcgQEAgcHJpdmF0ZToK
ICAgICBtdXRhYmxlIFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVudCBtX3N0b3JhZ2VBY2Nlc3NFeGlz
dHNTdGF0ZW1lbnQ7CiAgICAgbXV0YWJsZSBXZWJDb3JlOjpTUUxpdGVTdGF0ZW1lbnQgbV9nZXRN
b3N0UmVjZW50bHlVcGRhdGVkVGltZXN0YW1wU3RhdGVtZW50OwogICAgIFBBTDo6U2Vzc2lvbklE
IG1fc2Vzc2lvbklEOworICAgIGJvb2wgbV9pc05ld1Jlc291cmNlTG9hZFN0YXRpc3RpY3NEYXRh
YmFzZUZpbGUgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIvV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xh
c3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCmluZGV4IDIzZmZkYzg3
YTA1ODA4YjNmMjAxMmY0ODc3OGFmMTJjMmFiZDNjMWQuLjcxYWVjM2M5YTBhZGQ0NjMzY2Q3YzQx
YmU2NGI5MDY0ZmYwMWY3YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllci9XZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmUuY3BwCkBAIC0yMzAsNyArMjMwLDE5IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpwb3B1bGF0ZU1lbW9yeVN0b3JlRnJvbURpc2soQ29tcGxldGlvbkhh
bmRsCiAgICAgICAgICAgICBtX3BlcnNpc3RlbnRTdG9yYWdlLT5wb3B1bGF0ZU1lbW9yeVN0b3Jl
RnJvbURpc2soW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwog
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAoaXM8UmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlU3RvcmU+KCptX3N0YXRpc3RpY3NTdG9yZSkpIHsKKyAg
ICAgICAgICAgIGF1dG8mIGRhdGFiYXNlU3RvcmUgPSBkb3duY2FzdDxSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRGF0YWJhc2VTdG9yZT4oKm1fc3RhdGlzdGljc1N0b3JlKTsKKyAgICAgICAgICAgIGlm
IChkYXRhYmFzZVN0b3JlLmlzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSgp
KSB7CisgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVyRXhpc3Rp
bmdXZWJzaXRlRGF0YShbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7
CisgICAgICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGRhdGFiYXNlU3Rv
cmUuc2V0SXNOZXdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VGaWxlKGZhbHNlKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHBvc3RUYXNrUmVwbHkoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgpIG11dGFibGUgeworICAgICAgICAgICAgICAg
ICAgICBsb2dUZXN0aW5nRXZlbnQoIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJfcyk7
CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcG9zdFRhc2tSZXBseShXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgfSk7CiB9CkBAIC05MjQsOSArOTM2LDExIEBAIHZv
aWQgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpzY2hlZHVsZUNsZWFySW5NZW1vcnlB
bmRQZXJzaXN0ZW50KFNob3VsZEdyCiAKICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmNsZWFy
KFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gcHJvdGVjdGVkVGhpcy5jb3B5UmVmKCksIHNob3VsZEdy
YW5kZmF0aGVyLCBjYWxsYmFja0FnZ3JlZ2F0b3IgPSBjYWxsYmFja0FnZ3JlZ2F0b3IuY29weVJl
ZigpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChzaG91bGRHcmFuZGZhdGhlciA9PSBT
aG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3M6OlllcykgewotICAgICAgICAgICAgICAgIGlmICht
X3N0YXRpc3RpY3NTdG9yZSkKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0aXN0aWNzU3RvcmUp
IHsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0aXN0aWNzU3RvcmUtPmdyYW5kZmF0aGVyRXhp
c3RpbmdXZWJzaXRlRGF0YShbY2FsbGJhY2tBZ2dyZWdhdG9yID0gV1RGTW92ZShjYWxsYmFja0Fn
Z3JlZ2F0b3IpXSgpIG11dGFibGUgeyB9KTsKLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGlmIChpczxSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGF0YWJhc2VTdG9yZT4o
Km1fc3RhdGlzdGljc1N0b3JlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PFJl
c291cmNlTG9hZFN0YXRpc3RpY3NEYXRhYmFzZVN0b3JlPigqbV9zdGF0aXN0aWNzU3RvcmUpLnNl
dElzTmV3UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFiYXNlRmlsZSh0cnVlKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9MT0coUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgIldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6c2NoZWR1bGVD
bGVhckluTWVtb3J5QW5kUGVyc2lzdGVudCBBZnRlciBiZWluZyBjbGVhcmVkLCBtX3N0YXRpc3Rp
Y3NTdG9yZSBpcyBudWxsIHdoZW4gdHJ5aW5nIHRvIGdyYW5kZmF0aGVyIGRhdGEuIik7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1ByZWZlcmVuY2VzLmNwcAppbmRleCA3YThhYTE1MTFhMWU0Y2Y3ZGQ3ZWQ3NDkwNzUyODY3
YmE3ZDZhOGIyLi5iYWEyM2U1NTgwZjFkMmM4NDkyYWFkNmNiOGJmNDFjMDkwZmIzZmRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAt
MTE4LDYgKzExOCwxNiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRMb2Fkc1NpdGVJY29uc0lnbm9y
aW5nSW1hZ2VMb2FkaW5nUHJlZmVyZW5jZShXS1ByZWZlcmVuY2VzUgogICAgIHJldHVybiB0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5sb2Fkc1NpdGVJY29uc0lnbm9yaW5nSW1hZ2VMb2FkaW5nUHJl
ZmVyZW5jZSgpOwogfQogCit2b2lkIFdLUHJlZmVyZW5jZXNTZXRJc0lUUERhdGFiYXNlRW5hYmxl
ZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGlzSVRQRGF0YWJhc2VFbmFi
bGVkKQoreworICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldElzSVRQRGF0YWJhc2VFbmFi
bGVkKGlzSVRQRGF0YWJhc2VFbmFibGVkKTsKK30KKworYm9vbCBXS1ByZWZlcmVuY2VzR2V0SXNJ
VFBEYXRhYmFzZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKK3sKKyAg
ICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsK
K30KKwogdm9pZCBXS1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgb2ZmbGluZVdlYkFwcGxp
Y2F0aW9uQ2FjaGVFbmFibGVkKQogewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE9m
ZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChvZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
cmVmZXJlbmNlc1JlZi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlc1JlZi5oCmluZGV4IDQ4MTcyNTExZmZhYzNjMjgyNTkxNDdhMTVmY2NjMDVmYzJiMzE5Mzcu
LjQ1NTQxZmYxMWFiMDU2MDgwMzYxOWUzMzNlZGUzYjliMzdiZmY4ODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWYuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmLmgKQEAgLTc3LDYgKzc3
LDEwIEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRMb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlCiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVu
Y2VzU2V0TG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlcywgYm9vbCBsb2Fkc1NpdGVJY29uc0lnbm9yaW5nSW1hZ2VM
b2FkaW5nUHJlZmVyZW5jZSk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TG9hZHNT
aXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlcyk7CiAKKy8vIERlZmF1bHRzIHRvIHRydWUuCitXS19FWFBPUlQgdm9pZCBXS1By
ZWZlcmVuY2VzU2V0SXNJVFBEYXRhYmFzZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlcywgYm9vbCBpc0lUUERhdGFiYXNlRW5hYmxlZCk7CitXS19FWFBPUlQgYm9vbCBXS1ByZWZl
cmVuY2VzR2V0SXNJVFBEYXRhYmFzZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
cyk7CisKIC8vIERlZmF1bHRzIHRvIHRydWUuCiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJl
ZmVyZW5jZXMsIGJvb2wgb2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKTsKIFdLX0VY
UE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCmluZGV4IGFiNzNjNTlmNzFmZmEz
OWEyMjBjZTBiNWM4ZDE0ZmZkODc0ZDU3ZjYuLjZjNTEzY2E0NGNjZDM1MmM3NmE5M2Y4MDFmZGY2
YmRmMzM3NDc4OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1ByZWZlcmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1ByZWZlcmVuY2VzLm1tCkBAIC05MDIsNiArOTAyLDExIEBAIC0gKHZvaWQpX3NldFJlbW90
ZVBsYXliYWNrRW5hYmxlZDooQk9PTCllbmFibGVkCiAgICAgX3ByZWZlcmVuY2VzLT5zZXRSZW1v
dGVQbGF5YmFja0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKKy0gKEJPT0wpX2lzSVRQRGF0YWJhc2VF
bmFibGVkCit7CisgICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+aXNJVFBEYXRhYmFzZUVuYWJsZWQo
KTsKK30KKwogI2lmIFBMQVRGT1JNKE1BQykKIC0gKHZvaWQpX3NldEphdmFFbmFibGVkRm9yTG9j
YWxGaWxlczooQk9PTCllbmFibGVkCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGI4NDllY2RmOTc1
ZmYxZGE1MWYzZjhjNTYwODgzNDAwYWExZWYwZGMuLjViNDM4ZTI1N2QzYjViZDZmM2I3OGZlZmUz
Y2M4MjMwM2M1MjU1MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC0xNjEsNiArMTYxLDcgQEAgdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLRWRpdGFibGVMaW5rQmVoYXZpb3IpIHsKIEBwcm9w
ZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFdlYkF1ZGlvRW5hYmxlZDopIEJPT0wgX3dlYkF1
ZGlvRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0KSwgaW9zKFdLX0lPU19UQkEp
KTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkOikgQk9PTCBfYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgV0tfQVBJX0FW
QUlMQUJMRShtYWNvcygxMC4xMy40KSwgaW9zKFdLX0lPU19UQkEpKTsKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCBzZXR0ZXI9X3NldFJlcXVlc3RBbmltYXRpb25GcmFtZUVuYWJsZWQ6KSBCT09MIF9y
ZXF1ZXN0QW5pbWF0aW9uRnJhbWVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IEJPT0wgX2lzSVRQRGF0YWJhc2VFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoV0tfTUFD
X1RCQSksIGlvcyhXS19JT1NfVEJBKSk7CiAKICNpZiAhVEFSR0VUX09TX0lQSE9ORQogQHByb3Bl
cnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2ViR0xFbmFibGVkOikgQk9PTCBfd2ViR0xFbmFi
bGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggZmFlNjRm
OGMwNjRiZjAwMTAwZTJkN2MzNmU0MDcwZGRhZmE0YTYzOS4uNjQxNmNkZGZiNWQ1YTczNWRmMTQ1
MzkwYjJjZmM3MjgwZjE4MjFiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCkBAIC00MDEsNyArNDAxLDExIEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhCiAKICAgICBwYXJhbWV0ZXJzLnN0b3JhZ2VBY2Nlc3NBUElFbmFi
bGVkID0gc3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQoKTsKIAotICAgIHBhcmFtZXRlcnMuc2hvdWxk
RW5hYmxlSVRQRGF0YWJhc2UgPSBbZGVmYXVsdHMgYm9vbEZvcktleTpbTlNTdHJpbmcgc3RyaW5n
V2l0aEZvcm1hdDpAIkludGVybmFsRGVidWclQCIsIFdlYlByZWZlcmVuY2VzS2V5Ojppc0lUUERh
dGFiYXNlRW5hYmxlZEtleSgpLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCldXTsKKyAgICBOU051bWJl
ciAqZGF0YWJhc2VFbmFibGVkVmFsdWUgPSBbZGVmYXVsdHMgb2JqZWN0Rm9yS2V5OltOU1N0cmlu
ZyBzdHJpbmdXaXRoRm9ybWF0OkAiSW50ZXJuYWxEZWJ1ZyVAIiwgV2ViUHJlZmVyZW5jZXNLZXk6
OmlzSVRQRGF0YWJhc2VFbmFibGVkS2V5KCkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOworICAg
IGlmIChkYXRhYmFzZUVuYWJsZWRWYWx1ZSkKKyAgICAgICAgcGFyYW1ldGVycy5zaG91bGRFbmFi
bGVJVFBEYXRhYmFzZSA9IGRhdGFiYXNlRW5hYmxlZFZhbHVlLmJvb2xWYWx1ZTsKKyAgICBlbHNl
CisgICAgICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlSVRQRGF0YWJhc2UgPSBtX2RlZmF1bHRQ
YWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuaXNJVFBEYXRhYmFzZUVuYWJsZWQoKTsKIAogICAgIHBh
cmFtZXRlcnMuZW5hYmxlQWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlID0gW2RlZmF1bHRzIGJv
b2xGb3JLZXk6W05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCJFeHBlcmltZW50YWwlQCIsIFdl
YlByZWZlcmVuY2VzS2V5OjphZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkS2V5KCku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKV1dOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ2ZDEzOTI4YWZkZWMyOGMwZDgxOWQyZDkyMGQ4ZTMw
NjE0OTFjMmUuLjQ3ZTJhYWY4MTFiMTkyNTY3NzE2YjdiNmQwNGYwMzQyMjZiYWZiOGYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NCBAQAorMjAyMC0wMS0xMCAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNv
bT4KKworICAgICAgICBBZGQgY29ycmVjdCBncmFuZGZhdGhlcmluZyBmdW5jdGlvbmFsaXR5IHRv
IHRoZSBJVFAgZGF0YWJhc2UgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA1ODQ0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81ODM2MDQ1
MD4KKworICAgICAgICBSZXZpZXdlZCBieSBKb2huIFdpbGFuZGVyLgorCisgICAgICAgIEluIG9y
ZGVyIHRvIHRlc3QgYm90aCB0aGUgSVRQIGRhdGFiYXNlIGFuZCBtZW1vcnkgc3RvcmVzLCB0aGlz
IHBhdGNoCisgICAgICAgIGhhZCB0byByZXN0cnVjdHVyZSB0aGUgZ3JhbmRmYXRoZXJpbmcgQVBJ
IHRlc3RzLgorCisgICAgICAgIElmIHRoZSB0ZXN0IGlzIGZvciB0aGUgZGF0YWJhc2UgYmFja2Vu
ZCAoZW5kcyBpbiAqRGF0YWJhc2UpLCBpdCB3aWxsCisgICAgICAgIGNoZWNrIGlmIHRoZSBkZWZh
dWx0IHN0b3JlIG1hdGNoZXMuIElmIHNvLCBpdCBjb250aW51ZXMgb24gd2l0aCB0aGUKKyAgICAg
ICAgbm9ybWFsIHRlc3QuIElmIG5vdCwgaXQgaGFzIHRvIHVzZSBhbiBBUEkgY2FsbCB0byByZWNv
bnN0cnVjdCB0aGUKKyAgICAgICAgbmV3IHN0b3JlIGFuZCBlbnN1cmUgdGhlIGdyYW5kZmF0aGVy
aW5nIHN0aWxsIGhhcHBlbnMuIFZpY2UgdmVyc2EgZm9yCisgICAgICAgIHRoZSBtZW1vcnkgc3Rv
cmUgdGVzdHMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Jl
c291cmNlTG9hZFN0YXRpc3RpY3MubW06CisgICAgICAgIChpc0lUUERhdGFiYXNlRW5hYmxlZCk6
CisgICAgICAgIChURVNUKToKKwogMjAyMC0wMS0xMCAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFy
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgUHl0aG9uMzogU3VwcG9ydCBTb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MubW0KaW5kZXggMmQyNzlmYjUx
YTFhNTQyNzQzMTY1Mzg5N2I3ZmRlOTg4MmFkZDA5Yi4uYmMzMzQ5ZjYyNDE4ZGEwMjY4NWM5OGY4
NjA1N2NiY2Q2MzZmNTFiMSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljcy5tbQpAQCAtNjks
NiArNjksMTkgQEAgLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZpbmlz
aE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXQKIAogQGVuZAogCitib29sIGlzSVRQ
RGF0YWJhc2VFbmFibGVkKCkKK3sKKyAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNV
c2VyRGVmYXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOworICAgIGF1dG8gY29uZmlndXJhdGlv
biA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAg
YXV0byBkZWZhdWx0RGF0YWJhc2VFbmFibGVkID0gW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNd
Ll9pc0lUUERhdGFiYXNlRW5hYmxlZDsKKworICAgIE5TTnVtYmVyICpkYXRhYmFzZUVuYWJsZWRW
YWx1ZSA9IFtkZWZhdWx0cyBvYmplY3RGb3JLZXk6QCJJbnRlcm5hbERlYnVnSXNJVFBEYXRhYmFz
ZUVuYWJsZWQiXTsKKyAgICBpZiAoZGF0YWJhc2VFbmFibGVkVmFsdWUpCisgICAgICAgIHJldHVy
biBkYXRhYmFzZUVuYWJsZWRWYWx1ZS5ib29sVmFsdWU7CisKKyAgICByZXR1cm4gZGVmYXVsdERh
dGFiYXNlRW5hYmxlZDsKK30KKwogVEVTVChSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZh
dGhlckNhbGxiYWNrKQogewogICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3Rv
cmUgZGVmYXVsdERhdGFTdG9yZV07CkBAIC04Myw3ICs5Niw5IEBAIFRFU1QoUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFjaykKICAgICBzdGF0aWMgYm9vbCBncmFuZGZh
dGhlcmVkRmxhZzsKIAogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2Up
IHsKLSAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiR3JhbmRm
YXRoZXJlZCJdKTsKKyAgICAgICAgLy8gT25seSBpZiB0aGUgZGF0YWJhc2Ugc3RvcmUgaXMgbm90
IGRlZmF1bHQtZW5hYmxlZCBkbyB3ZSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhpcyBmaXJzdCBtZXNz
YWdlIGlzIGNvcnJlY3QuCisgICAgICAgIGlmICghaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkKKyAg
ICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIkdyYW5kZmF0
aGVyZWQiXSk7CiAgICAgICAgIGdyYW5kZmF0aGVyZWRGbGFnID0gdHJ1ZTsKICAgICB9XTsKIApA
QCAtOTIsNiArMTA3LDI1IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRo
ZXJDYWxsYmFjaykKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5h
YmxlZDpZRVNdOwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVz
dFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91dDpibGFuayJdXV07CiAKKyAgICBp
ZiAoaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkgeworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGls
OjpydW4oJmdyYW5kZmF0aGVyZWRGbGFnKTsKKworICAgICAgICAvLyBTaW5jZSB0aGUgZGF0YWJh
c2Ugc3RvcmUgaXMgZW5hYmxlZCwgd2UgbmVlZCB0byBkaXNhYmxlIGl0IHRvIHRlc3QgdGhpcyBm
dW5jdGlvbmFsaXR5IHdpdGggdGhlIHBsaXN0LgorICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUg
YSBOZXR3b3JrUHJvY2VzcyB1cCBhbmQgcnVubmluZyB3aXRoIElUUCBlbmFibGVkLiBXZSBub3cg
bWFrZSBhbm90aGVyIGNhbGwgaW5pdGlhbGl6aW5nCisgICAgICAgIC8vIHRoZSBtZW1vcnkgc3Rv
cmUgYW5kIHRlc3RpbmcgZ3JhbmRmYXRoZXJpbmcuCisgICAgICAgIGdyYW5kZmF0aGVyZWRGbGFn
ID0gZmFsc2U7CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NU
ZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2Up
IHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIkdy
YW5kZmF0aGVyZWQiXSk7CisgICAgICAgICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IHRydWU7Cisg
ICAgICAgIH1dOworCisgICAgICAgIFtkYXRhU3RvcmUgX3NldFVzZUlUUERhdGFiYXNlOmZhbHNl
IGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1
ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25l
RmxhZyk7CisgICAgfQorCiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZncmFuZGZhdGhl
cmVkRmxhZyk7CiAKICAgICAvLyBTcGluIHRoZSBydW5sb29wIHVudGlsIHRoZSByZXNvdXJjZSBs
b2FkIHN0YXRpc3RpY3MgZmlsZSBoYXMgd3JpdHRlbiB0byBkaXNrLgpAQCAtMTAzLDYgKzEzNyw3
IEBAIFRFU1QoUmVzb3VyY2VMb2FkU3RhdGlzdGljcywgR3JhbmRmYXRoZXJDYWxsYmFjaykKICAg
ICB9CiAKICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IGZhbHNlOworICAgIGRvbmVGbGFnID0gZmFs
c2U7CiAgICAgW2RhdGFTdG9yZSByZW1vdmVEYXRhT2ZUeXBlczpbV0tXZWJzaXRlRGF0YVN0b3Jl
IF9hbGxXZWJzaXRlRGF0YVR5cGVzSW5jbHVkaW5nUHJpdmF0ZV0gIG1vZGlmaWVkU2luY2U6W05T
RGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7CiAgICAgICAgIGRvbmVGbGFn
ID0gdHJ1ZTsKICAgICB9XTsKQEAgLTEzNCw2ICsxNjksODMgQEAgVEVTVChSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxiYWNrKQogICAgIH0KIH0KIAorVEVTVChSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzLCBHcmFuZGZhdGhlckNhbGxiYWNrRGF0YWJhc2UpCit7CisgICAgYXV0
byAqZGF0YVN0b3JlID0gW1dLV2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXTsKKwor
ICAgIE5TVVJMICpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0
aDpbQCJ+L0xpYnJhcnkvV2ViS2l0L1Rlc3RXZWJLaXRBUEkvV2Vic2l0ZURhdGEvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyIgc3RyaW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6
WUVTXTsKKyAgICBOU1VSTCAqZmlsZVVSTCA9IFtzdGF0aXN0aWNzRGlyZWN0b3J5VVJMIFVSTEJ5
QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAIm9ic2VydmF0aW9ucy5kYiJdOworICAgIFtbTlNGaWxl
TWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gcmVtb3ZlSXRlbUF0VVJMOmZpbGVVUkwgZXJyb3I6bmls
XTsKKyAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDpz
dGF0aXN0aWNzRGlyZWN0b3J5VVJMIGVycm9yOm5pbF07CisgICAgRVhQRUNUX0ZBTFNFKFtbTlNG
aWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gZmlsZUV4aXN0c0F0UGF0aDpzdGF0aXN0aWNzRGly
ZWN0b3J5VVJMLnBhdGhdKTsKKworICAgIHN0YXRpYyBib29sIGdyYW5kZmF0aGVyZWRGbGFnOwor
ICAgIHN0YXRpYyBib29sIGRvbmVGbGFnOworCisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc1Rlc3RpbmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0
cmluZyAqbWVzc2FnZSkgeworICAgICAgICAvLyBPbmx5IGlmIHRoZSBkYXRhYmFzZSBzdG9yZSBp
cyBkZWZhdWx0LWVuYWJsZWQgZG8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoaXMgZmlyc3QgbWVz
c2FnZSBpcyBjb3JyZWN0LgorICAgICAgICBpZiAoaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkKKyAg
ICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIkdyYW5kZmF0
aGVyZWQiXSk7CisgICAgICAgIGdyYW5kZmF0aGVyZWRGbGFnID0gdHJ1ZTsKKyAgICB9XTsKKwor
ICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCldKTsKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZDpZRVNdOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0
OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJhYm91
dDpibGFuayJdXV07CisKKyAgICBpZiAoIWlzSVRQRGF0YWJhc2VFbmFibGVkKCkpIHsKKyAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZncmFuZGZhdGhlcmVkRmxhZyk7CisKKyAgICAg
ICAgLy8gU2luY2UgdGhlIGRhdGFiYXNlIHN0b3JlIGlzIG5vdCBlbmFibGVkLCB3ZSBuZWVkIHRv
IHVwZGF0ZSB0aGUgc3RvcmUgdG8gdXNlIGEgZGF0YWJhc2UgaW5zdGVhZCBvZiBhIHBsaXN0IGZv
ciB0aGlzIHRlc3QuCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNz
IHVwIGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2Fs
bCBpbml0aWFsaXppbmcKKyAgICAgICAgLy8gdGhlIGRhdGFiYXNlIHN0b3JlIGFuZCB0ZXN0aW5n
IGdyYW5kZmF0aGVyaW5nLgorICAgICAgICBncmFuZGZhdGhlcmVkRmxhZyA9IGZhbHNlOworICAg
ICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNr
Ol4oV0tXZWJzaXRlRGF0YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgICAg
ICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJHcmFuZGZhdGhlcmVkIl0p
OworICAgICAgICAgICAgZ3JhbmRmYXRoZXJlZEZsYWcgPSB0cnVlOworICAgICAgICB9XTsKKwor
ICAgICAgICBbZGF0YVN0b3JlIF9zZXRVc2VJVFBEYXRhYmFzZTp0cnVlIGNvbXBsZXRpb25IYW5k
bGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07
CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQor
CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZncmFuZGZhdGhlcmVkRmxhZyk7CisKKyAg
ICAvLyBTcGluIHRoZSBydW5sb29wIHVudGlsIHRoZSByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3Mg
ZmlsZSBoYXMgd3JpdHRlbiB0byBkaXNrLgorICAgIC8vIElmIHRoZSB0ZXN0IGVudGVycyBhIHNw
aW4gbG9vcCBoZXJlLCBpdCBoYXMgZmFpbGVkLgorICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
IGlmIChbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6Zmls
ZVVSTC5wYXRoXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgxKTsKKyAgICB9CisKKyAgICBncmFuZGZhdGhlcmVkRmxhZyA9IGZh
bHNlOworICAgIGRvbmVGbGFnID0gZmFsc2U7CisgICAgW2RhdGFTdG9yZSByZW1vdmVEYXRhT2ZU
eXBlczpbV0tXZWJzaXRlRGF0YVN0b3JlIF9hbGxXZWJzaXRlRGF0YVR5cGVzSW5jbHVkaW5nUHJp
dmF0ZV0gIG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRs
ZXI6XiB7CisgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZsYWcpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNw
aW5SdW5Mb29wKDEwKTsKKworICAgIC8vIFRoZSB3ZWJzaXRlIGRhdGEgc3RvcmUgcmVtb3ZlIHNo
b3VsZCBoYXZlIGNvbXBsZXRlZCwgYnV0IHNpbmNlIHdlIHJlbW92ZWQgYWxsIG9mIHRoZSBkYXRh
IHR5cGVzIHRoYXQgYXJlIG1vbml0b3JlZCBieSByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MsCisg
ICAgLy8gbm8gZ3JhbmRmYXRoZXJpbmcgY2FsbCBzaG91bGQgaGF2ZSBiZWVuIG1hZGUuIE5vdGUg
dGhhdCB0aGUgZGF0YWJhc2UgZmlsZSB3aWxsIG5vdCBiZSBkZWxldGVkIGxpa2UgaW4gdGhlIHBl
cnNpc3RlbnQgc3RvcmFnZSBjYXNlLCBvbmx5IGNsZWFyZWQuCisgICAgRVhQRUNUX0ZBTFNFKGdy
YW5kZmF0aGVyZWRGbGFnKTsKKworICAgIGRvbmVGbGFnID0gZmFsc2U7CisgICAgW2RhdGFTdG9y
ZSByZW1vdmVEYXRhT2ZUeXBlczpbTlNTZXQgc2V0V2l0aE9iamVjdHM6V0tXZWJzaXRlRGF0YVR5
cGVDb29raWVzLCBfV0tXZWJzaXRlRGF0YVR5cGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzLCBuaWxd
IG1vZGlmaWVkU2luY2U6W05TRGF0ZSBkaXN0YW50UGFzdF0gY29tcGxldGlvbkhhbmRsZXI6XiB7
CisgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICB9XTsKKworICAgIC8vIFNpbmNlIHdlIGRp
ZCBub3QgcmVtb3ZlIGV2ZXJ5IGRhdGEgdHlwZSBjb3ZlcmVkIGJ5IHJlc291cmNlIGxvYWQgc3Rh
dGlzdGljcywgd2UgZG8gZXhwZWN0IHRoYXQgZ3JhbmRmYXRoZXJpbmcgdG9vayBwbGFjZSBhZ2Fp
bi4KKyAgICAvLyBJZiB0aGUgdGVzdCBoYW5ncyB3YWl0aW5nIG9uIGVpdGhlciBvZiB0aGVzZSBj
b25kaXRpb25zLCBpdCBoYXMgZmFpbGVkLgorICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigm
Z3JhbmRmYXRoZXJlZEZsYWcpOworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmZG9uZUZs
YWcpOworfQorCiBURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdyYW5kZmF0
aGVyT25TdGFydHVwKQogewogICAgIGF1dG8gKmRhdGFTdG9yZSA9IFtXS1dlYnNpdGVEYXRhU3Rv
cmUgZGVmYXVsdERhdGFTdG9yZV07CkBAIC0xNDgsOCArMjYwLDYyIEBAIFRFU1QoUmVzb3VyY2VM
b2FkU3RhdGlzdGljcywgU2hvdWxkTm90R3JhbmRmYXRoZXJPblN0YXJ0dXApCiAgICAgRVhQRUNU
X1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnRh
cmdldFVSTC5wYXRoXSk7CiAKICAgICBzdGF0aWMgYm9vbCBjYWxsYmFja0ZsYWc7CisgICAgc3Rh
dGljIGJvb2wgZG9uZUZsYWc7CisKKyAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0b3JlICosIE5TU3RyaW5nICpt
ZXNzYWdlKSB7CisgICAgICAgIC8vIE9ubHkgaWYgdGhlIGRhdGFiYXNlIHN0b3JlIGlzIG5vdCBk
ZWZhdWx0LWVuYWJsZWQgZG8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoaXMgZmlyc3QgbWVzc2Fn
ZSBpcyBjb3JyZWN0LgorICAgICAgICBpZiAoIWlzSVRQRGF0YWJhc2VFbmFibGVkKCkpCisgICAg
ICAgICAgICBBU1NFUlRfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRX
aXRob3V0R3JhbmRmYXRoZXJpbmciXSk7CisgICAgICAgIGNhbGxiYWNrRmxhZyA9IHRydWU7Cisg
ICAgfV07CisKKyAgICAvLyBXZSBuZWVkIGFuIGFjdGl2ZSBOZXR3b3JrUHJvY2VzcyB0byBwZXJm
b3JtIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgb3BlcmF0aW9ucy4KKyAgICBhdXRvIHdlYlZpZXcg
PSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOk5TTWFrZVJlY3QoMCwg
MCwgODAwLCA2MDApXSk7CisgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQ6WUVTXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYWJvdXQ6YmxhbmsiXV1dOworCisg
ICAgaWYgKGlzSVRQRGF0YWJhc2VFbmFibGVkKCkpIHsKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6
VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOworCisgICAgICAgIC8vIFNpbmNlIHRoZSBkYXRhYmFz
ZSBzdG9yZSBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGRpc2FibGUgaXQgdG8gdGVzdCB0aGlzIGZ1
bmN0aW9uYWxpdHkgd2l0aCB0aGUgcGxpc3QuCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBh
IE5ldHdvcmtQcm9jZXNzIHVwIGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBt
YWtlIGFub3RoZXIgY2FsbCBpbml0aWFsaXppbmcKKyAgICAgICAgLy8gdGhlIG1lbW9yeSBzdG9y
ZSBhbmQgdGVzdGluZyBncmFuZGZhdGhlcmluZy4KKyAgICAgICAgY2FsbGJhY2tGbGFnID0gZmFs
c2U7CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NUZXN0aW5n
Q2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1lc3NhZ2UpIHsKKyAg
ICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRl
ZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKKyAgICAgICAgICAgIGNhbGxiYWNrRmxhZyA9IHRy
dWU7CisgICAgICAgIH1dOworCisgICAgICAgIFtkYXRhU3RvcmUgX3NldFVzZUlUUERhdGFiYXNl
OmZhbHNlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFn
ID0gdHJ1ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVu
KCZkb25lRmxhZyk7CisgICAgfQorCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxs
YmFja0ZsYWcpOworfQorCitURVNUKFJlc291cmNlTG9hZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdy
YW5kZmF0aGVyT25TdGFydHVwRGF0YWJhc2UpCit7CisgICAgYXV0byAqZGF0YVN0b3JlID0gW1dL
V2Vic2l0ZURhdGFTdG9yZSBkZWZhdWx0RGF0YVN0b3JlXTsKKworICAgIE5TVVJMICpzdGF0aXN0
aWNzRGlyZWN0b3J5VVJMID0gW05TVVJMIGZpbGVVUkxXaXRoUGF0aDpbQCJ+L0xpYnJhcnkvV2Vi
S2l0L1Rlc3RXZWJLaXRBUEkvV2Vic2l0ZURhdGEvUmVzb3VyY2VMb2FkU3RhdGlzdGljcyIgc3Ry
aW5nQnlFeHBhbmRpbmdUaWxkZUluUGF0aF0gaXNEaXJlY3Rvcnk6WUVTXTsKKyAgICBOU1VSTCAq
dGFyZ2V0VVJMID0gW3N0YXRpc3RpY3NEaXJlY3RvcnlVUkwgVVJMQnlBcHBlbmRpbmdQYXRoQ29t
cG9uZW50OkAib2JzZXJ2YXRpb25zLmRiIl07CisgICAgTlNVUkwgKnRlc3RSZXNvdXJjZVVSTCA9
IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJFbXB0eUdyYW5kZmF0aGVy
ZWRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzIiB3aXRoRXh0ZW5zaW9uOkAicGxpc3QiIHN1YmRpcmVj
dG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CisKKyAgICBbW05TRmlsZU1hbmFnZXIg
ZGVmYXVsdE1hbmFnZXJdIGNyZWF0ZURpcmVjdG9yeUF0VVJMOnN0YXRpc3RpY3NEaXJlY3RvcnlV
Ukwgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOllFUyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpu
aWxdOworICAgIFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY29weUl0ZW1BdFVSTDp0
ZXN0UmVzb3VyY2VVUkwgdG9VUkw6dGFyZ2V0VVJMIGVycm9yOm5pbF07CisKKyAgICBFWFBFQ1Rf
VFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGZpbGVFeGlzdHNBdFBhdGg6dGFy
Z2V0VVJMLnBhdGhdKTsKKworICAgIHN0YXRpYyBib29sIGNhbGxiYWNrRmxhZzsKKyAgICBzdGF0
aWMgYm9vbCBkb25lRmxhZzsKKwogICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJpbmcgKm1l
c3NhZ2UpIHsKLSAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAi
UG9wdWxhdGVkV2l0aG91dEdyYW5kZmF0aGVyaW5nIl0pOworICAgICAgICAvLyBPbmx5IGlmIHRo
ZSBkYXRhYmFzZSBzdG9yZSBpcyBkZWZhdWx0LWVuYWJsZWQgZG8gd2UgbmVlZCB0byBjaGVjayB0
aGF0IHRoaXMgZmlyc3QgbWVzc2FnZSBpcyBjb3JyZWN0LgorICAgICAgICBpZiAoaXNJVFBEYXRh
YmFzZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxU
b1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKICAgICAgICAgY2Fs
bGJhY2tGbGFnID0gdHJ1ZTsKICAgICB9XTsKIApAQCAtMTU4LDYgKzMyNCwyNSBAQCBURVNUKFJl
c291cmNlTG9hZFN0YXRpc3RpY3MsIFNob3VsZE5vdEdyYW5kZmF0aGVyT25TdGFydHVwKQogICAg
IFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkOllFU107CiAgICAg
W3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpbTlNVUkwg
VVJMV2l0aFN0cmluZzpAImFib3V0OmJsYW5rIl1dXTsKIAorICAgIGlmICghaXNJVFBEYXRhYmFz
ZUVuYWJsZWQoKSkgeworICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmNhbGxiYWNr
RmxhZyk7CisKKyAgICAgICAgLy8gU2luY2UgdGhlIGRhdGFiYXNlIHN0b3JlIGlzIG5vdCBlbmFi
bGVkLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RvcmUgdG8gdXNlIGEgZGF0YWJhc2UgaW5zdGVh
ZCBvZiBhIHBsaXN0IGZvciB0aGlzIHRlc3QuCisgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBh
IE5ldHdvcmtQcm9jZXNzIHVwIGFuZCBydW5uaW5nIHdpdGggSVRQIGVuYWJsZWQuIFdlIG5vdyBt
YWtlIGFub3RoZXIgY2FsbCBpbml0aWFsaXppbmcKKyAgICAgICAgLy8gdGhlIGRhdGFiYXNlIHN0
b3JlIGFuZCB0ZXN0aW5nIGdyYW5kZmF0aGVyaW5nLgorICAgICAgICBjYWxsYmFja0ZsYWcgPSBm
YWxzZTsKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc1Rlc3Rp
bmdDYWxsYmFjazpeKFdLV2Vic2l0ZURhdGFTdG9yZSAqLCBOU1N0cmluZyAqbWVzc2FnZSkgewor
ICAgICAgICAgICAgQVNTRVJUX1RSVUUoW21lc3NhZ2UgaXNFcXVhbFRvU3RyaW5nOkAiUG9wdWxh
dGVkV2l0aG91dEdyYW5kZmF0aGVyaW5nIl0pOworICAgICAgICAgICAgY2FsbGJhY2tGbGFnID0g
dHJ1ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAgW2RhdGFTdG9yZSBfc2V0VXNlSVRQRGF0YWJh
c2U6dHJ1ZSBjb21wbGV0aW9uSGFuZGxlcjogXih2b2lkKSB7CisgICAgICAgICAgICBkb25lRmxh
ZyA9IHRydWU7CisgICAgICAgIH1dOworCisgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1
bigmZG9uZUZsYWcpOworICAgIH0KKwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2Fs
bGJhY2tGbGFnKTsKIH0KIApAQCAtMTc0LDE1ICszNTksODAgQEAgVEVTVChSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzLCBDaGlsZFByb2Nlc3Nlc05vdExhdW5jaGVkKQogICAgIE5TVVJMICp0YXJnZXRV
UkwgPSBbc3RhdGlzdGljc0RpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6
QCJmdWxsX2Jyb3dzaW5nX3Nlc3Npb25fcmVzb3VyY2VMb2cucGxpc3QiXTsKICAgICBOU1VSTCAq
dGVzdFJlc291cmNlVVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpA
IkVtcHR5R3JhbmRmYXRoZXJlZFJlc291cmNlTG9hZFN0YXRpc3RpY3MiIHdpdGhFeHRlbnNpb246
QCJwbGlzdCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKIAorICAg
IFtbTlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY3JlYXRlRGlyZWN0b3J5QXRVUkw6c3Rh
dGlzdGljc0RpcmVjdG9yeVVSTCB3aXRoSW50ZXJtZWRpYXRlRGlyZWN0b3JpZXM6WUVTIGF0dHJp
YnV0ZXM6bmlsIGVycm9yOm5pbF07CisgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2Vy
XSBjb3B5SXRlbUF0VVJMOnRlc3RSZXNvdXJjZVVSTCB0b1VSTDp0YXJnZXRVUkwgZXJyb3I6bmls
XTsKKyAgICAKKyAgICBFWFBFQ1RfVFJVRShbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJd
IGZpbGVFeGlzdHNBdFBhdGg6dGFyZ2V0VVJMLnBhdGhdKTsKKworICAgIHN0YXRpYyBib29sIGNh
bGxiYWNrRmxhZzsKKyAgICBzdGF0aWMgYm9vbCBkb25lRmxhZzsKKyAgICBbZGF0YVN0b3JlIF9z
ZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0
b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgIC8vIE9ubHkgaWYgdGhlIGRhdGFi
YXNlIHN0b3JlIGlzIG5vdCBkZWZhdWx0LWVuYWJsZWQgZG8gd2UgbmVlZCB0byBjaGVjayB0aGF0
IHRoaXMgZmlyc3QgbWVzc2FnZSBpcyBjb3JyZWN0LgorICAgICAgICBpZiAoIWlzSVRQRGF0YWJh
c2VFbmFibGVkKCkpCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShbbWVzc2FnZSBpc0VxdWFsVG9T
dHJpbmc6QCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmciXSk7CisgICAgICAgIGNhbGxi
YWNrRmxhZyA9IHRydWU7CisgICAgfV07CisKKyAgICAvLyBXZSBuZWVkIGFuIGFjdGl2ZSBOZXR3
b3JrUHJvY2VzcyB0byBwZXJmb3JtIFJlc291cmNlTG9hZFN0YXRpc3RpY3Mgb3BlcmF0aW9ucy4K
KyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbV0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZy
YW1lOk5TTWFrZVJlY3QoMCwgMCwgODAwLCA2MDApXSk7CisgICAgW2RhdGFTdG9yZSBfc2V0UmVz
b3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiYWJv
dXQ6YmxhbmsiXV1dOworCisgICAgaWYgKGlzSVRQRGF0YWJhc2VFbmFibGVkKCkpIHsKKyAgICAg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOworCisgICAgICAgIC8v
IFNpbmNlIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIGRpc2FibGUg
aXQgdG8gdGVzdCB0aGlzIGZ1bmN0aW9uYWxpdHkgd2l0aCB0aGUgcGxpc3QuCisgICAgICAgIC8v
IFdlIGFscmVhZHkgaGF2ZSBhIE5ldHdvcmtQcm9jZXNzIHVwIGFuZCBydW5uaW5nIHdpdGggSVRQ
IGVuYWJsZWQuIFdlIG5vdyBtYWtlIGFub3RoZXIgY2FsbCBpbml0aWFsaXppbmcKKyAgICAgICAg
Ly8gdGhlIG1lbW9yeSBzdG9yZSBhbmQgdGVzdGluZyBncmFuZGZhdGhlcmluZy4KKyAgICAgICAg
Y2FsbGJhY2tGbGFnID0gZmFsc2U7CisgICAgICAgIFtkYXRhU3RvcmUgX3NldFJlc291cmNlTG9h
ZFN0YXRpc3RpY3NUZXN0aW5nQ2FsbGJhY2s6XihXS1dlYnNpdGVEYXRhU3RvcmUgKiwgTlNTdHJp
bmcgKm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxU
b1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKKyAgICAgICAgICAg
IGNhbGxiYWNrRmxhZyA9IHRydWU7CisgICAgICAgIH1dOworCisgICAgICAgIFtkYXRhU3RvcmUg
X3NldFVzZUlUUERhdGFiYXNlOmZhbHNlIGNvbXBsZXRpb25IYW5kbGVyOiBeKHZvaWQpIHsKKyAg
ICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07CisKKyAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQorCisgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOworCisgICAgRVhQRUNUX1RSVUUoW1tOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnRhcmdldFVSTC5wYXRoXSk7
CisKKyAgICB3ZWJWaWV3LmNsZWFyKCk7CisKKyAgICBFWFBFQ1RfRVEoKHNpemVfdCkwLCBbc2hh
cmVkUHJvY2Vzc1Bvb2wgX3BsdWdpblByb2Nlc3NDb3VudF0pOworfQorCitURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIENoaWxkUHJvY2Vzc2VzTm90TGF1bmNoZWREYXRhYmFzZSkKK3sKKyAg
ICAvLyBFbnN1cmUgdGhlIHNoYXJlZCBwcm9jZXNzIHBvb2wgZXhpc3RzIHNvIHRoZSBkYXRhIHN0
b3JlIG9wZXJhdGlvbnMgd2UncmUgYWJvdXQgdG8gZG8gd29yayB3aXRoIGl0LgorICAgIFdLUHJv
Y2Vzc1Bvb2wgKnNoYXJlZFByb2Nlc3NQb29sID0gW1dLUHJvY2Vzc1Bvb2wgX3NoYXJlZFByb2Nl
c3NQb29sXTsKKworICAgIEVYUEVDVF9FUSgoc2l6ZV90KTAsIFtzaGFyZWRQcm9jZXNzUG9vbCBf
cGx1Z2luUHJvY2Vzc0NvdW50XSk7CisKKyAgICBhdXRvICpkYXRhU3RvcmUgPSBbV0tXZWJzaXRl
RGF0YVN0b3JlIGRlZmF1bHREYXRhU3RvcmVdOworCisgICAgTlNVUkwgKnN0YXRpc3RpY3NEaXJl
Y3RvcnlVUkwgPSBbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltAIn4vTGlicmFyeS9XZWJLaXQvVGVz
dFdlYktpdEFQSS9XZWJzaXRlRGF0YS9SZXNvdXJjZUxvYWRTdGF0aXN0aWNzIiBzdHJpbmdCeUV4
cGFuZGluZ1RpbGRlSW5QYXRoXSBpc0RpcmVjdG9yeTpZRVNdOworICAgIE5TVVJMICp0YXJnZXRV
UkwgPSBbc3RhdGlzdGljc0RpcmVjdG9yeVVSTCBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6
QCJvYnNlcnZhdGlvbnMuZGIiXTsKKworICAgIE5TVVJMICp0ZXN0UmVzb3VyY2VVUkwgPSBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAiRW1wdHlHcmFuZGZhdGhlcmVkUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyIgd2l0aEV4dGVuc2lvbjpAInBsaXN0IiBzdWJkaXJlY3Rvcnk6
QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1
bHRNYW5hZ2VyXSBjcmVhdGVEaXJlY3RvcnlBdFVSTDpzdGF0aXN0aWNzRGlyZWN0b3J5VVJMIHdp
dGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpZRVMgYXR0cmlidXRlczpuaWwgZXJyb3I6bmlsXTsK
ICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNvcHlJdGVtQXRVUkw6dGVzdFJl
c291cmNlVVJMIHRvVVJMOnRhcmdldFVSTCBlcnJvcjpuaWxdOwogCiAgICAgRVhQRUNUX1RSVUUo
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnRhcmdldFVS
TC5wYXRoXSk7CiAKKyAgICBzdGF0aWMgYm9vbCBjYWxsYmFja0ZsYWc7CiAgICAgc3RhdGljIGJv
b2wgZG9uZUZsYWc7CisKICAgICBbZGF0YVN0b3JlIF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
VGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdl
KSB7Ci0gICAgICAgIEVYUEVDVF9UUlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVs
YXRlZFdpdGhvdXRHcmFuZGZhdGhlcmluZyJdKTsKLSAgICAgICAgZG9uZUZsYWcgPSB0cnVlOwor
ICAgICAgICAvLyBPbmx5IGlmIHRoZSBkYXRhYmFzZSBzdG9yZSBpcyBkZWZhdWx0LWVuYWJsZWQg
ZG8gd2UgbmVlZCB0byBjaGVjayB0aGF0IHRoaXMgZmlyc3QgbWVzc2FnZSBpcyBjb3JyZWN0Lgor
ICAgICAgICBpZiAoaXNJVFBEYXRhYmFzZUVuYWJsZWQoKSkKKyAgICAgICAgICAgIEVYUEVDVF9U
UlVFKFttZXNzYWdlIGlzRXF1YWxUb1N0cmluZzpAIlBvcHVsYXRlZFdpdGhvdXRHcmFuZGZhdGhl
cmluZyJdKTsKKyAgICAgICAgY2FsbGJhY2tGbGFnID0gdHJ1ZTsKICAgICB9XTsKIAogICAgIC8v
IFdlIG5lZWQgYW4gYWN0aXZlIE5ldHdvcmtQcm9jZXNzIHRvIHBlcmZvcm0gUmVzb3VyY2VMb2Fk
U3RhdGlzdGljcyBvcGVyYXRpb25zLgpAQCAtMTkwLDcgKzQ0MCwyNiBAQCBURVNUKFJlc291cmNl
TG9hZFN0YXRpc3RpY3MsIENoaWxkUHJvY2Vzc2VzTm90TGF1bmNoZWQpCiAgICAgW2RhdGFTdG9y
ZSBfc2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQ6WUVTXTsKICAgICBbd2ViVmlldyBs
b2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOltOU1VSTCBVUkxXaXRoU3Ry
aW5nOkAiYWJvdXQ6YmxhbmsiXV1dOwogCi0gICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZk
b25lRmxhZyk7CisgICAgaWYgKCFpc0lUUERhdGFiYXNlRW5hYmxlZCgpKSB7CisgICAgICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY2FsbGJhY2tGbGFnKTsKKworICAgICAgICAvLyBTaW5j
ZSB0aGUgZGF0YWJhc2Ugc3RvcmUgaXMgbm90IGVuYWJsZWQsIHdlIG5lZWQgdG8gdXBkYXRlIHRo
ZSBzdG9yZSB0byB1c2UgYSBkYXRhYmFzZSBpbnN0ZWFkIG9mIGEgcGxpc3QgZm9yIHRoaXMgdGVz
dC4KKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgTmV0d29ya1Byb2Nlc3MgdXAgYW5kIHJ1
bm5pbmcgd2l0aCBJVFAgZW5hYmxlZC4gV2Ugbm93IG1ha2UgYW5vdGhlciBjYWxsIGluaXRpYWxp
emluZworICAgICAgICAvLyB0aGUgZGF0YWJhc2Ugc3RvcmUgYW5kIHRlc3RpbmcgZ3JhbmRmYXRo
ZXJpbmcuCisgICAgICAgIGNhbGxiYWNrRmxhZyA9IGZhbHNlOworICAgICAgICBbZGF0YVN0b3Jl
IF9zZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzVGVzdGluZ0NhbGxiYWNrOl4oV0tXZWJzaXRlRGF0
YVN0b3JlICosIE5TU3RyaW5nICptZXNzYWdlKSB7CisgICAgICAgICAgICBBU1NFUlRfVFJVRShb
bWVzc2FnZSBpc0VxdWFsVG9TdHJpbmc6QCJQb3B1bGF0ZWRXaXRob3V0R3JhbmRmYXRoZXJpbmci
XSk7CisgICAgICAgICAgICBjYWxsYmFja0ZsYWcgPSB0cnVlOworICAgICAgICB9XTsKKworICAg
ICAgICBbZGF0YVN0b3JlIF9zZXRVc2VJVFBEYXRhYmFzZTp0cnVlIGNvbXBsZXRpb25IYW5kbGVy
OiBeKHZvaWQpIHsKKyAgICAgICAgICAgIGRvbmVGbGFnID0gdHJ1ZTsKKyAgICAgICAgfV07CisK
KyAgICAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lRmxhZyk7CisgICAgfQorCisg
ICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZjYWxsYmFja0ZsYWcpOwogCiAgICAgRVhQRUNU
X1RSVUUoW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBmaWxlRXhpc3RzQXRQYXRoOnRh
cmdldFVSTC5wYXRoXSk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>